1e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block/* 2e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * Copyright (C) 2010 Apple Inc. All rights reserved. 3e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * Copyright (C) 2010 Google Inc. All rights reserved. 4e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * 5e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * Redistribution and use in source and binary forms, with or without 6e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * modification, are permitted provided that the following conditions 7e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * are met: 8e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * 9e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * 1. Redistributions of source code must retain the above copyright 10e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * notice, this list of conditions and the following disclaimer. 11e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * 2. Redistributions in binary form must reproduce the above copyright 12e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * notice, this list of conditions and the following disclaimer in the 13e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * documentation and/or other materials provided with the distribution. 14e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 15e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * its contributors may be used to endorse or promote products derived 16e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * from this software without specific prior written permission. 17e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * 18e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 19e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 22e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block */ 29e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 30e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#ifndef InspectorProfilerAgent_h 31e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#define InspectorProfilerAgent_h 32e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 334576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#if ENABLE(JAVASCRIPT_DEBUGGER) && ENABLE(INSPECTOR) 34e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 3581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "InspectorFrontend.h" 36e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "PlatformString.h" 37e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include <wtf/Forward.h> 38e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include <wtf/HashMap.h> 39e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include <wtf/Noncopyable.h> 40e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include <wtf/PassOwnPtr.h> 41e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 42e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blocknamespace WebCore { 43e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 44e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockclass InspectorArray; 4581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass InspectorConsoleAgent; 46e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockclass InspectorFrontend; 47e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockclass InspectorObject; 482bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass InspectorState; 4981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass InstrumentingAgents; 5081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass Page; 515ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenclass ScriptHeapSnapshot; 52e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockclass ScriptProfile; 53e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 5481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochtypedef String ErrorString; 5581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 56ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass InspectorProfilerAgent { 57ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch WTF_MAKE_NONCOPYABLE(InspectorProfilerAgent); WTF_MAKE_FAST_ALLOCATED; 58e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockpublic: 592bde8e466a4451c7319e3a072d118917957d6554Steve Block static PassOwnPtr<InspectorProfilerAgent> create(InstrumentingAgents*, InspectorConsoleAgent*, Page*, InspectorState*); 60e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block virtual ~InspectorProfilerAgent(); 61e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 62e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block void addProfile(PassRefPtr<ScriptProfile> prpProfile, unsigned lineNumber, const String& sourceURL); 63e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block void addProfileFinishedMessageToConsole(PassRefPtr<ScriptProfile>, unsigned lineNumber, const String& sourceURL); 64e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block void addStartProfilingMessageToConsole(const String& title, unsigned lineNumber, const String& sourceURL); 652bde8e466a4451c7319e3a072d118917957d6554Steve Block void collectGarbage(ErrorString*); 6681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch void clearProfiles(ErrorString*) { resetState(); } 672bde8e466a4451c7319e3a072d118917957d6554Steve Block void resetState(); 682bde8e466a4451c7319e3a072d118917957d6554Steve Block 692bde8e466a4451c7319e3a072d118917957d6554Steve Block void enable(ErrorString*); 702bde8e466a4451c7319e3a072d118917957d6554Steve Block void disable(ErrorString*); 712bde8e466a4451c7319e3a072d118917957d6554Steve Block void isEnabled(ErrorString*, bool* result) { *result = enabled(); } 722bde8e466a4451c7319e3a072d118917957d6554Steve Block void start(ErrorString*) { startUserInitiatedProfiling(); } 732bde8e466a4451c7319e3a072d118917957d6554Steve Block void stop(ErrorString*) { stopUserInitiatedProfiling(); } 742bde8e466a4451c7319e3a072d118917957d6554Steve Block 75e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block void disable(); 76e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block void enable(bool skipRecompile); 77e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block bool enabled() { return m_enabled; } 78e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block String getCurrentUserInitiatedProfileName(bool incrementProfileNumber = false); 7981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch void getProfileHeaders(ErrorString* error, RefPtr<InspectorArray>* headers); 8081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch void getProfile(ErrorString* error, const String& type, unsigned uid, RefPtr<InspectorObject>* profileObject); 81e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block bool isRecordingUserInitiatedProfile() { return m_recordingUserInitiatedProfile; } 8281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch void removeProfile(ErrorString* error, const String& type, unsigned uid); 832bde8e466a4451c7319e3a072d118917957d6554Steve Block 842bde8e466a4451c7319e3a072d118917957d6554Steve Block void setFrontend(InspectorFrontend*); 852bde8e466a4451c7319e3a072d118917957d6554Steve Block void clearFrontend(); 862bde8e466a4451c7319e3a072d118917957d6554Steve Block void restore(); 872bde8e466a4451c7319e3a072d118917957d6554Steve Block 88e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block void startUserInitiatedProfiling(); 8928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu void stopUserInitiatedProfiling(bool ignoreProfile = false); 9081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch void takeHeapSnapshot(ErrorString* error, bool detailed); 91e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block void toggleRecordButton(bool isProfiling); 92e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 93e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockprivate: 94e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block typedef HashMap<unsigned int, RefPtr<ScriptProfile> > ProfilesMap; 955ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen typedef HashMap<unsigned int, RefPtr<ScriptHeapSnapshot> > HeapSnapshotsMap; 96e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 972bde8e466a4451c7319e3a072d118917957d6554Steve Block void resetFrontendProfiles(); 982bde8e466a4451c7319e3a072d118917957d6554Steve Block void restoreEnablement(); 992bde8e466a4451c7319e3a072d118917957d6554Steve Block 1002bde8e466a4451c7319e3a072d118917957d6554Steve Block InspectorProfilerAgent(InstrumentingAgents*, InspectorConsoleAgent*, Page*, InspectorState*); 101e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block PassRefPtr<InspectorObject> createProfileHeader(const ScriptProfile& profile); 1025ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen PassRefPtr<InspectorObject> createSnapshotHeader(const ScriptHeapSnapshot& snapshot); 103e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 10481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch InstrumentingAgents* m_instrumentingAgents; 10581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch InspectorConsoleAgent* m_consoleAgent; 10681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch Page* m_inspectedPage; 1072bde8e466a4451c7319e3a072d118917957d6554Steve Block InspectorState* m_inspectorState; 10881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch InspectorFrontend::Profiler* m_frontend; 109e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block bool m_enabled; 110e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block bool m_recordingUserInitiatedProfile; 111e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block int m_currentUserInitiatedProfileNumber; 112e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block unsigned m_nextUserInitiatedProfileNumber; 1135ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen unsigned m_nextUserInitiatedHeapSnapshotNumber; 114e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block ProfilesMap m_profiles; 1155ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen HeapSnapshotsMap m_snapshots; 116e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}; 117e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 118e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} // namespace WebCore 119e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 1204576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#endif // ENABLE(JAVASCRIPT_DEBUGGER) && ENABLE(INSPECTOR) 121e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 122e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#endif // !defined(InspectorProfilerAgent_h) 123