Changeset 64642 in webkit


Ignore:
Timestamp:
Aug 4, 2010 5:22:31 AM (14 years ago)
Author:
yurys@chromium.org
Message:

2010-08-04 Yury Semikhatsky <yurys@chromium.org>

Reviewed by Pavel Feldman.

Web Inspector: serialize CPU profiles to InspectorValues instead of
using JS wrappers.
https://bugs.webkit.org/show_bug.cgi?id=43475

  • Android.jscbindings.mk:
  • CMakeLists.txt:
  • GNUmakefile.am:
  • WebCore.pro:
  • WebCore.vcproj/WebCore.vcproj:
  • WebCore.xcodeproj/project.pbxproj:
  • bindings/js/ScriptProfile.h:
  • bindings/js/ScriptProfiler.cpp: (WebCore::ScriptProfiler::stop):
  • bindings/scripts/CodeGeneratorJS.pm:
  • bindings/v8/ScriptProfile.cpp: (WebCore::buildInspectorObjectFor): (WebCore::ScriptProfile::buildInspectorObjectForHead):
  • bindings/v8/ScriptProfile.h:
  • inspector/Inspector.idl:
  • inspector/InspectorController.cpp: (WebCore::InspectorController::addProfile): (WebCore::InspectorController::addProfileFinishedMessageToConsole): (WebCore::InspectorController::getProfileHeaders): (WebCore::InspectorController::getProfile): (WebCore::InspectorController::createProfileHeader):
  • inspector/InspectorController.h:
  • inspector/InspectorFrontend.cpp:
  • inspector/InspectorFrontend.h:
Location:
trunk/WebCore
Files:
1 added
17 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/Android.jscbindings.mk

    r64517 r64642  
    171171        bindings/js/ScriptFunctionCall.cpp \
    172172        bindings/js/ScriptObject.cpp \
     173        bindings/js/ScriptProfile.cpp \
    173174        bindings/js/ScriptState.cpp \
    174175        bindings/js/ScriptValue.cpp \
  • trunk/WebCore/CMakeLists.txt

    r64577 r64642  
    685685    bindings/js/ScriptGCEvent.cpp
    686686    bindings/js/ScriptObject.cpp
     687    bindings/js/ScriptProfile.cpp
    687688    bindings/js/ScriptProfiler.cpp
    688689    bindings/js/ScriptState.cpp
  • trunk/WebCore/ChangeLog

    r64641 r64642  
     12010-08-04  Yury Semikhatsky  <yurys@chromium.org>
     2
     3        Reviewed by Pavel Feldman.
     4
     5        Web Inspector: serialize CPU profiles to InspectorValues instead of
     6        using JS wrappers.
     7        https://bugs.webkit.org/show_bug.cgi?id=43475
     8
     9        * Android.jscbindings.mk:
     10        * CMakeLists.txt:
     11        * GNUmakefile.am:
     12        * WebCore.pro:
     13        * WebCore.vcproj/WebCore.vcproj:
     14        * WebCore.xcodeproj/project.pbxproj:
     15        * bindings/js/ScriptProfile.h:
     16        * bindings/js/ScriptProfiler.cpp:
     17        (WebCore::ScriptProfiler::stop):
     18        * bindings/scripts/CodeGeneratorJS.pm:
     19        * bindings/v8/ScriptProfile.cpp:
     20        (WebCore::buildInspectorObjectFor):
     21        (WebCore::ScriptProfile::buildInspectorObjectForHead):
     22        * bindings/v8/ScriptProfile.h:
     23        * inspector/Inspector.idl:
     24        * inspector/InspectorController.cpp:
     25        (WebCore::InspectorController::addProfile):
     26        (WebCore::InspectorController::addProfileFinishedMessageToConsole):
     27        (WebCore::InspectorController::getProfileHeaders):
     28        (WebCore::InspectorController::getProfile):
     29        (WebCore::InspectorController::createProfileHeader):
     30        * inspector/InspectorController.h:
     31        * inspector/InspectorFrontend.cpp:
     32        * inspector/InspectorFrontend.h:
     33
    1342010-08-04  Andreas Kling  <andreas.kling@nokia.com>
    235
  • trunk/WebCore/GNUmakefile.am

    r64580 r64642  
    777777        WebCore/bindings/js/ScriptObject.cpp \
    778778        WebCore/bindings/js/ScriptObject.h \
     779        WebCore/bindings/js/ScriptProfile.cpp \
    779780        WebCore/bindings/js/ScriptProfile.h \
    780781        WebCore/bindings/js/ScriptProfileNode.h \
  • trunk/WebCore/WebCore.pro

    r64577 r64642  
    379379    bindings/js/ScriptGCEvent.cpp \
    380380    bindings/js/ScriptObject.cpp \
     381    bindings/js/ScriptProfile.cpp \
    381382    bindings/js/ScriptState.cpp \
    382383    bindings/js/ScriptValue.cpp \
  • trunk/WebCore/WebCore.vcproj/WebCore.vcproj

    r64607 r64642  
    4824948249                                </File>
    4825048250                                <File
     48251                                        RelativePath="..\bindings\js\ScriptProfile.cpp"
     48252                                        >
     48253                                </File>
     48254                                <File
    4825148255                                        RelativePath="..\bindings\js\ScriptSourceCode.h"
    4825248256                                        >
  • trunk/WebCore/WebCore.xcodeproj/project.pbxproj

    r64637 r64642  
    51885188                EDE3A5000C7A430600956A37 /* ColorMac.h in Headers */ = {isa = PBXBuildFile; fileRef = EDE3A4FF0C7A430600956A37 /* ColorMac.h */; settings = {ATTRIBUTES = (Private, ); }; };
    51895189                EDEC98030AED7E170059137F /* WebCorePrefix.h in Headers */ = {isa = PBXBuildFile; fileRef = EDEC98020AED7E170059137F /* WebCorePrefix.h */; };
     5190                F33F0282120947F200E5743A /* ScriptProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F33F0281120947F200E5743A /* ScriptProfile.cpp */; };
    51905191                F344C7141125B82C00F26EEE /* InspectorFrontendClient.h in Headers */ = {isa = PBXBuildFile; fileRef = F344C7121125B82C00F26EEE /* InspectorFrontendClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
    51915192                F344C75311294D9D00F26EEE /* InspectorFrontendClientLocal.h in Headers */ = {isa = PBXBuildFile; fileRef = F344C75211294D9D00F26EEE /* InspectorFrontendClientLocal.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    1092110922                EDE3A4FF0C7A430600956A37 /* ColorMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ColorMac.h; sourceTree = "<group>"; };
    1092210923                EDEC98020AED7E170059137F /* WebCorePrefix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = WebCorePrefix.h; sourceTree = "<group>"; tabWidth = 4; usesTabs = 0; };
     10924                F33F0281120947F200E5743A /* ScriptProfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptProfile.cpp; sourceTree = "<group>"; };
    1092310925                F344C7121125B82C00F26EEE /* InspectorFrontendClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorFrontendClient.h; sourceTree = "<group>"; };
    1092410926                F344C75211294D9D00F26EEE /* InspectorFrontendClientLocal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorFrontendClientLocal.h; sourceTree = "<group>"; };
     
    1582315825                                41F066E30F64BCF600A07EAC /* ScriptObject.cpp */,
    1582415826                                41F066E20F64BCF600A07EAC /* ScriptObject.h */,
     15827                                F33F0281120947F200E5743A /* ScriptProfile.cpp */,
    1582515828                                9F72304C11184B4100AD0126 /* ScriptProfile.h */,
    1582615829                                9FA37EE31172FC8000C4CD55 /* ScriptProfileNode.h */,
     
    2191821921                                4FD8D0F2119C718B002FA825 /* ScriptGCEvent.cpp in Sources */,
    2191921922                                41F066E50F64BCF600A07EAC /* ScriptObject.cpp in Sources */,
     21923                                F33F0282120947F200E5743A /* ScriptProfile.cpp in Sources */,
    2192021924                                9F72305011184B4100AD0126 /* ScriptProfiler.cpp in Sources */,
    2192121925                                4127D5370F8AAB1D00E424F5 /* ScriptState.cpp in Sources */,
  • trunk/WebCore/bindings/js/ScriptProfile.h

    r54277 r64642  
    2929
    3030#if ENABLE(JAVASCRIPT_DEBUGGER)
    31 #include <profiler/Profile.h>
     31#include "ScriptProfileNode.h"
     32#include <wtf/PassRefPtr.h>
     33#include <wtf/RefCounted.h>
     34#include <wtf/RefPtr.h>
     35
     36namespace JSC {
     37class Profile;
     38}
    3239
    3340namespace WebCore {
    3441
    35 typedef JSC::Profile ScriptProfile;
     42class InspectorObject;
     43class String;
     44
     45class ScriptProfile : public RefCounted<ScriptProfile> {
     46public:
     47    static PassRefPtr<ScriptProfile> create(PassRefPtr<JSC::Profile> profile);
     48    virtual ~ScriptProfile();
     49
     50    String title() const;
     51    unsigned int uid() const;
     52    ScriptProfileNode* head() const;
     53
     54    PassRefPtr<InspectorObject> buildInspectorObjectForHead() const;
     55
     56private:
     57    ScriptProfile(PassRefPtr<JSC::Profile> profile);
     58
     59    RefPtr<JSC::Profile> m_profile;
     60};
     61
    3662
    3763} // namespace WebCore
  • trunk/WebCore/bindings/js/ScriptProfiler.cpp

    r57738 r64642  
    4343PassRefPtr<ScriptProfile> ScriptProfiler::stop(ScriptState* state, const String& title)
    4444{
    45     return JSC::Profiler::profiler()->stopProfiling(state, stringToUString(title));
     45    RefPtr<JSC::Profile> profile = JSC::Profiler::profiler()->stopProfiling(state, stringToUString(title));
     46    return ScriptProfile::create(profile);
    4647}
    4748
  • trunk/WebCore/bindings/scripts/CodeGeneratorJS.pm

    r64537 r64642  
    300300{
    301301    my $type = shift;
    302     return 1 if ($type eq "ScriptProfile" or $type eq "ScriptProfileNode");
     302    return 1 if ($type eq "ScriptProfileNode");
    303303    return 0;
    304304}
  • trunk/WebCore/bindings/v8/ScriptProfile.cpp

    r63965 r64642  
    3030
    3131#include "config.h"
    32 
    3332#include "ScriptProfile.h"
    3433
     34#include "InspectorValues.h"
    3535#include "V8Binding.h"
    36 
    3736#include <v8-profiler.h>
     37#include <wtf/PassRefPtr.h>
     38#include <wtf/RefPtr.h>
    3839
    3940namespace WebCore {
     
    5556}
    5657
     58static PassRefPtr<InspectorObject> buildInspectorObjectFor(const v8::CpuProfileNode* node)
     59{
     60    v8::HandleScope handleScope;
     61    RefPtr<InspectorObject> result = InspectorObject::create();
     62    result->setString("functionName", toWebCoreString(node->GetFunctionName()));
     63    result->setString("url", toWebCoreString(node->GetScriptResourceName()));
     64    result->setNumber("lineNumber", node->GetLineNumber());
     65    result->setNumber("totalTime", node->GetTotalTime());
     66    result->setNumber("selfTime", node->GetSelfTime());
     67    result->setNumber("numberOfCalls", 0);
     68    result->setBool("visible", true);
     69    result->setNumber("callUID", node->GetCallUid());
     70
     71    RefPtr<InspectorArray> children = InspectorArray::create();
     72    const int childrenCount = node->GetChildrenCount();
     73    for (int i = 0; i < childrenCount; i++) {
     74        const v8::CpuProfileNode* child = node->GetChild(i);
     75        children->push(buildInspectorObjectFor(child));
     76    }
     77    result->set("children", children);
     78    return result;
     79}
     80
     81PassRefPtr<InspectorObject> ScriptProfile::buildInspectorObjectForHead() const
     82{
     83    return buildInspectorObjectFor(m_profile->GetTopDownRoot());
     84}
     85
    5786} // namespace WebCore
  • trunk/WebCore/bindings/v8/ScriptProfile.h

    r57505 r64642  
    4141namespace WebCore {
    4242
     43class InspectorObject;
     44
    4345class ScriptProfile : public RefCounted<ScriptProfile> {
    4446public:
     
    5355    PassRefPtr<ScriptProfileNode> head() const;
    5456
    55 protected:
     57    PassRefPtr<InspectorObject> buildInspectorObjectForHead() const;
     58
     59private:
    5660    ScriptProfile(const v8::CpuProfile* profile)
    5761        : m_profile(profile)
    5862    {}
    5963
    60 private:
    6164    const v8::CpuProfile* m_profile;
    6265};
  • trunk/WebCore/inspector/Inspector.idl

    r64547 r64642  
    5050        [notify] void pausedScript(out Value callFrames);
    5151        [notify] void resumedScript();
     52        [notify] void addProfileHeader(out Object header);
    5253#endif
    5354
     
    9899        [handler=Controller] void stopProfiling();
    99100
    100         [handler=Controller] void getProfileHeaders(in long callId);
    101         [handler=Controller] void getProfile(in long callId, in unsigned long uid);
     101        [handler=Controller] void getProfileHeaders(in long callId, out Array headers);
     102        [handler=Controller] void getProfile(in long callId, in unsigned long uid, out Object profile);
    102103
    103104        [handler=Controller] void removeProfile(in unsigned long uid);
  • trunk/WebCore/inspector/InspectorController.cpp

    r64547 r64642  
    109109#if ENABLE(JAVASCRIPT_DEBUGGER)
    110110#include "ScriptDebugServer.h"
    111 #if USE(JSC)
    112 #include <runtime/JSLock.h>
    113 #include <runtime/UString.h>
    114 #include "JSScriptProfile.h"
    115 #else
    116 #include "ScriptScope.h"
    117 #include "V8ScriptProfile.h"
    118 #endif
    119111#endif
    120112
     
    14991491    m_profiles.add(profile->uid(), profile);
    15001492
    1501     if (m_frontend) {
    1502 #if USE(JSC)
    1503         JSC::JSLock lock(JSC::SilenceAssertionsOnly);
    1504 #endif
    1505         m_frontend->addProfileHeader(createProfileHeader(*profile));
     1493    if (m_remoteFrontend) {
     1494        m_remoteFrontend->addProfileHeader(createProfileHeader(*profile));
    15061495    }
    15071496
     
    15131502    RefPtr<ScriptProfile> profile = prpProfile;
    15141503
    1515 #if USE(JSC)
    1516     String title = ustringToString(profile->title());
    1517 #else
    15181504    String title = profile->title();
    1519 #endif
    15201505    String message = String::format("Profile \"webkit-profile://%s/%s#%d\" finished.", CPUProfileType, encodeWithURLEscapeSequences(title).utf8().data(), profile->uid());
    15211506    addMessageToConsole(JSMessageSource, LogMessageType, LogMessageLevel, message, lineNumber, sourceURL);
     
    15491534void InspectorController::getProfileHeaders(long callId)
    15501535{
    1551     if (!m_frontend)
    1552         return;
    1553     ScriptArray result = m_frontend->newScriptArray();
     1536    if (!m_remoteFrontend)
     1537        return;
     1538    RefPtr<InspectorArray> result = InspectorArray::create();
    15541539    ProfilesMap::iterator profilesEnd = m_profiles.end();
    1555     int i = 0;
    15561540    for (ProfilesMap::iterator it = m_profiles.begin(); it != profilesEnd; ++it)
    1557         result.set(i++, createProfileHeader(*it->second));
    1558     m_frontend->didGetProfileHeaders(callId, result);
     1541        result->push(createProfileHeader(*it->second));
     1542    m_remoteFrontend->didGetProfileHeaders(callId, result);
    15591543}
    15601544
     
    15651549    ProfilesMap::iterator it = m_profiles.find(uid);
    15661550    if (it != m_profiles.end()) {
    1567 #if USE(JSC)
    1568         m_frontend->didGetProfile(callId, toJS(m_frontend->scriptState(), it->second.get()));
    1569 #else
    1570         ScriptScope scope(m_frontend->scriptState());
    1571         m_frontend->didGetProfile(callId, toV8(it->second.get()));
    1572 #endif
    1573     }
    1574 }
    1575 
    1576 ScriptObject InspectorController::createProfileHeader(const ScriptProfile& profile)
    1577 {
    1578 #if USE(JSC)
    1579     String title = ustringToString(profile.title());
    1580 #else
    1581     String title = profile.title();
    1582 #endif
    1583 
    1584     ScriptObject header = m_frontend->newScriptObject();
    1585     header.set("title", title);
    1586     header.set("uid", profile.uid());
    1587     header.set("typeId", String(CPUProfileType));
     1551        RefPtr<InspectorObject> profileObject = createProfileHeader(*it->second);
     1552        profileObject->set("head", it->second->buildInspectorObjectForHead());
     1553        m_remoteFrontend->didGetProfile(callId, profileObject);
     1554    }
     1555}
     1556
     1557PassRefPtr<InspectorObject> InspectorController::createProfileHeader(const ScriptProfile& profile)
     1558{
     1559    RefPtr<InspectorObject> header = InspectorObject::create();
     1560    header->setString("title", profile.title());
     1561    header->setNumber("uid", profile.uid());
     1562    header->setString("typeId", String(CPUProfileType));
    15881563    return header;
    15891564}
  • trunk/WebCore/inspector/InspectorController.h

    r64540 r64642  
    319319    void getProfileHeaders(long callId);
    320320    void getProfile(long callId, unsigned uid);
    321     ScriptObject createProfileHeader(const ScriptProfile& profile);
     321    PassRefPtr<InspectorObject> createProfileHeader(const ScriptProfile& profile);
    322322#endif
    323323#if ENABLE(DATABASE)
  • trunk/WebCore/inspector/InspectorFrontend.cpp

    r64547 r64642  
    311311}
    312312
    313 void InspectorFrontend::addProfileHeader(const ScriptValue& profile)
    314 {
    315     ScriptFunctionCall function(m_webInspector, "dispatch");
    316     function.appendArgument("addProfileHeader");
    317     function.appendArgument(profile);
    318     function.call();
    319 }
    320 
    321313void InspectorFrontend::setRecordingProfile(bool isProfiling)
    322314{
     
    324316    function.appendArgument("setRecordingProfile");
    325317    function.appendArgument(isProfiling);
    326     function.call();
    327 }
    328 
    329 void InspectorFrontend::didGetProfileHeaders(long callId, const ScriptArray& headers)
    330 {
    331     ScriptFunctionCall function(m_webInspector, "dispatch");
    332     function.appendArgument("didGetProfileHeaders");
    333     function.appendArgument(callId);
    334     function.appendArgument(headers);
    335318    function.call();
    336319}
  • trunk/WebCore/inspector/InspectorFrontend.h

    r64547 r64642  
    103103        void profilerWasEnabled();
    104104        void profilerWasDisabled();
    105         void addProfileHeader(const ScriptValue& profile);
    106105        void setRecordingProfile(bool isProfiling);
    107         void didGetProfileHeaders(long callId, const ScriptArray& headers);
    108106        void didGetProfile(long callId, const ScriptValue& profile);
    109107#endif
Note: See TracChangeset for help on using the changeset viewer.