 Chromium Code Reviews
 Chromium Code Reviews Issue 74063002:
  DevTools: Support asynchronous call stacks on backend.  (Closed) 
  Base URL: svn://svn.chromium.org/blink/trunk
    
  
    Issue 74063002:
  DevTools: Support asynchronous call stacks on backend.  (Closed) 
  Base URL: svn://svn.chromium.org/blink/trunk| Index: Source/core/inspector/AsyncCallStackTracker.h | 
| diff --git a/Source/core/inspector/AsyncCallStackTracker.h b/Source/core/inspector/AsyncCallStackTracker.h | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..da4221429a394b29f22e97d54b9cf76dfaa6980b | 
| --- /dev/null | 
| +++ b/Source/core/inspector/AsyncCallStackTracker.h | 
| @@ -0,0 +1,99 @@ | 
| +/* | 
| + * Copyright (C) 2013 Google Inc. All rights reserved. | 
| + * | 
| + * Redistribution and use in source and binary forms, with or without | 
| + * modification, are permitted provided that the following conditions are | 
| + * met: | 
| + * | 
| + * * Redistributions of source code must retain the above copyright | 
| + * notice, this list of conditions and the following disclaimer. | 
| + * * Redistributions in binary form must reproduce the above | 
| + * copyright notice, this list of conditions and the following disclaimer | 
| + * in the documentation and/or other materials provided with the | 
| + * distribution. | 
| + * * Neither the name of Google Inc. nor the names of its | 
| + * contributors may be used to endorse or promote products derived from | 
| + * this software without specific prior written permission. | 
| + * | 
| + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 
| + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 
| + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
| + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | 
| + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
| + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 
| + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
| + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
| + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 
| + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
| + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
| + */ | 
| + | 
| +#ifndef AsyncCallStackTracker_h | 
| +#define AsyncCallStackTracker_h | 
| + | 
| +#include "bindings/v8/ScriptValue.h" | 
| +#include "wtf/Deque.h" | 
| +#include "wtf/HashMap.h" | 
| +#include "wtf/HashSet.h" | 
| +#include "wtf/Noncopyable.h" | 
| +#include "wtf/PassRefPtr.h" | 
| +#include "wtf/RefPtr.h" | 
| + | 
| +namespace WebCore { | 
| + | 
| +class AsyncCallStackTracker { | 
| + WTF_MAKE_NONCOPYABLE(AsyncCallStackTracker); | 
| +public: | 
| + class AsyncCallStack : public RefCounted<AsyncCallStack> { | 
| + public: | 
| + AsyncCallStack(const ScriptValue&); | 
| + ~AsyncCallStack(); | 
| + const ScriptValue& callFrames() const { return m_callFrames; } | 
| 
yurys
2013/12/04 15:25:52
Just return it by value.
 
aandrey
2013/12/04 15:57:26
why? :)
 
yurys
2013/12/05 11:37:48
Because it is a bad idea in general to return some
 
aandrey
2013/12/05 13:03:40
Done.
 | 
| + private: | 
| + ScriptValue m_callFrames; | 
| + }; | 
| + | 
| + typedef Deque<RefPtr<AsyncCallStack>, 4> AsyncCallStackVector; | 
| + | 
| + class AsyncCallChain : public RefCounted<AsyncCallChain> { | 
| + public: | 
| + AsyncCallChain() { } | 
| + AsyncCallChain(const AsyncCallChain& t) : m_callStacks(t.m_callStacks) { } | 
| + const AsyncCallStackVector& callStacks() const { return m_callStacks; } | 
| 
yurys
2013/12/04 15:25:52
ditto.
 
aandrey
2013/12/05 13:03:40
Done.
 | 
| + private: | 
| + friend class AsyncCallStackTracker; | 
| + AsyncCallStackVector m_callStacks; | 
| + }; | 
| + | 
| + AsyncCallStackTracker(); | 
| + | 
| + bool isEnabled() const { return m_maxAsyncCallStackDepth; } | 
| + void setAsyncCallStackDepth(int); | 
| + const AsyncCallChain* currentAsyncCallChain() const; | 
| + | 
| + void didInstallTimer(int timerId, bool singleShot, ScriptValue callFrames); | 
| 
yurys
2013/12/04 15:25:52
const ScriptValue&
 
aandrey
2013/12/04 15:57:26
Done.
 | 
| + void didRemoveTimer(int timerId); | 
| + void willFireTimer(int timerId); | 
| + | 
| + void didRequestAnimationFrame(int callbackId, ScriptValue callFrames); | 
| 
yurys
2013/12/04 15:25:52
const ScriptValue&
 
aandrey
2013/12/04 15:57:26
Done.
 | 
| + void didCancelAnimationFrame(int callbackId); | 
| + void willFireAnimationFrame(int callbackId); | 
| + | 
| + void didFireAsyncCall(); | 
| + void clear(); | 
| + | 
| +private: | 
| + PassRefPtr<AsyncCallChain> createAsyncCallChain(ScriptValue& callFrames); | 
| + static void ensureMaxAsyncCallChainDepth(AsyncCallChain*, unsigned); | 
| + static bool validateCallFrames(ScriptValue& callFrames); | 
| + | 
| + unsigned m_maxAsyncCallStackDepth; | 
| + RefPtr<AsyncCallChain> m_currentAsyncCallChain; | 
| + HashSet<int> m_intervalTimerIds; | 
| + HashMap<int, RefPtr<AsyncCallChain> > m_timerCallChains; | 
| + HashMap<int, RefPtr<AsyncCallChain> > m_animationFrameCallChains; | 
| +}; | 
| + | 
| +} // namespace WebCore | 
| + | 
| +#endif // !defined(AsyncCallStackTracker_h) |