2 * Copyright (C) 2010 Google Inc. All rights reserved.
3 * Copyright (C) 2012 Intel Inc. All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above
12 * copyright notice, this list of conditions and the following disclaimer
13 * in the documentation and/or other materials provided with the
15 * * Neither the name of Google Inc. nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35 #include "core/events/EventTarget.h"
36 #include "core/frame/DOMWindowProperty.h"
37 #include "core/timing/MemoryInfo.h"
38 #include "core/timing/PerformanceEntry.h"
39 #include "core/timing/PerformanceNavigation.h"
40 #include "core/timing/PerformanceTiming.h"
41 #include "platform/heap/Handle.h"
42 #include "wtf/PassRefPtr.h"
43 #include "wtf/RefCounted.h"
44 #include "wtf/RefPtr.h"
45 #include "wtf/text/WTFString.h"
51 class ResourceTimingInfo
;
54 using PerformanceEntryVector
= WillBeHeapVector
<RefPtrWillBeMember
<PerformanceEntry
>>;
56 class Performance final
: public EventTargetWithInlineData
, public RefCountedWillBeNoBase
<Performance
>, public DOMWindowProperty
{
57 DEFINE_WRAPPERTYPEINFO();
58 REFCOUNTED_EVENT_TARGET(Performance
);
59 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(Performance
);
61 static PassRefPtrWillBeRawPtr
<Performance
> create(LocalFrame
* frame
)
63 return adoptRefWillBeNoop(new Performance(frame
));
65 virtual ~Performance();
67 virtual const AtomicString
& interfaceName() const override
;
68 virtual ExecutionContext
* executionContext() const override
;
70 PassRefPtrWillBeRawPtr
<MemoryInfo
> memory() const;
71 PerformanceNavigation
* navigation() const;
72 PerformanceTiming
* timing() const;
75 PerformanceEntryVector
getEntries() const;
76 PerformanceEntryVector
getEntriesByType(const String
& entryType
);
77 PerformanceEntryVector
getEntriesByName(const String
& name
, const String
& entryType
);
79 void webkitClearResourceTimings();
80 void webkitSetResourceTimingBufferSize(unsigned);
82 DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitresourcetimingbufferfull
);
84 void addResourceTiming(const ResourceTimingInfo
&, Document
*);
86 void mark(const String
& markName
, ExceptionState
&);
87 void clearMarks(const String
& markName
);
89 void measure(const String
& measureName
, const String
& startMark
, const String
& endMark
, ExceptionState
&);
90 void clearMeasures(const String
& measureName
);
92 DECLARE_VIRTUAL_TRACE();
95 explicit Performance(LocalFrame
*);
97 bool isResourceTimingBufferFull();
98 void addResourceTimingBuffer(PassRefPtrWillBeRawPtr
<PerformanceEntry
>);
100 mutable RefPtrWillBeMember
<PerformanceNavigation
> m_navigation
;
101 mutable RefPtrWillBeMember
<PerformanceTiming
> m_timing
;
103 PerformanceEntryVector m_resourceTimingBuffer
;
104 unsigned m_resourceTimingBufferSize
;
105 double m_referenceTime
;
107 RefPtrWillBeMember
<UserTiming
> m_userTiming
;
112 #endif // Performance_h