ProfilerCompilation.h 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /*
  2. * Copyright (C) 2012, 2013 Apple Inc. All rights reserved.
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions
  6. * are met:
  7. * 1. Redistributions of source code must retain the above copyright
  8. * notice, this list of conditions and the following disclaimer.
  9. * 2. Redistributions in binary form must reproduce the above copyright
  10. * notice, this list of conditions and the following disclaimer in the
  11. * documentation and/or other materials provided with the distribution.
  12. *
  13. * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
  14. * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  15. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  16. * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
  17. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  18. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  19. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  20. * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  21. * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  22. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  23. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  24. */
  25. #ifndef ProfilerCompilation_h
  26. #define ProfilerCompilation_h
  27. #if !ENABLE(DETACHED_JIT)
  28. #include "ExitKind.h"
  29. #include "JSCJSValue.h"
  30. #include "ProfilerCompilationKind.h"
  31. #include "ProfilerCompiledBytecode.h"
  32. #include "ProfilerExecutionCounter.h"
  33. #include "ProfilerOSRExit.h"
  34. #include "ProfilerOSRExitSite.h"
  35. #include "ProfilerOriginStack.h"
  36. #include "ProfilerProfiledBytecodes.h"
  37. #include <wtf/RefCounted.h>
  38. #include <wtf/SegmentedVector.h>
  39. namespace JSC { namespace Profiler {
  40. class Bytecodes;
  41. class Database;
  42. // Represents the act of executing some bytecodes in some engine, and does
  43. // all of the counting for those executions.
  44. class Compilation : public RefCounted<Compilation> {
  45. public:
  46. Compilation(Bytecodes*, CompilationKind);
  47. ~Compilation();
  48. void addProfiledBytecodes(Database&, CodeBlock*);
  49. unsigned profiledBytecodesSize() const { return m_profiledBytecodes.size(); }
  50. const ProfiledBytecodes& profiledBytecodesAt(unsigned i) const { return m_profiledBytecodes[i]; }
  51. void noticeInlinedGetById() { m_numInlinedGetByIds++; }
  52. void noticeInlinedPutById() { m_numInlinedPutByIds++; }
  53. void noticeInlinedCall() { m_numInlinedCalls++; }
  54. Bytecodes* bytecodes() const { return m_bytecodes; }
  55. CompilationKind kind() const { return m_kind; }
  56. void addDescription(const CompiledBytecode&);
  57. ExecutionCounter* executionCounterFor(const OriginStack&);
  58. void addOSRExitSite(const Vector<const void*>& codeAddresses);
  59. OSRExit* addOSRExit(unsigned id, const OriginStack&, ExitKind, bool isWatchpoint);
  60. JSValue toJS(ExecState*) const;
  61. private:
  62. Bytecodes* m_bytecodes;
  63. CompilationKind m_kind;
  64. Vector<ProfiledBytecodes> m_profiledBytecodes;
  65. Vector<CompiledBytecode> m_descriptions;
  66. HashMap<OriginStack, OwnPtr<ExecutionCounter> > m_counters;
  67. Vector<OSRExitSite> m_osrExitSites;
  68. SegmentedVector<OSRExit> m_osrExits;
  69. unsigned m_numInlinedGetByIds;
  70. unsigned m_numInlinedPutByIds;
  71. unsigned m_numInlinedCalls;
  72. };
  73. } } // namespace JSC::Profiler
  74. #endif // #if !ENABLE(DETACHED_JIT)
  75. #endif // ProfilerCompilation_h