OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. | 2 * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 28 matching lines...) Expand all Loading... |
39 #include "wtf/WeakPtr.h" | 39 #include "wtf/WeakPtr.h" |
40 | 40 |
41 namespace blink { | 41 namespace blink { |
42 | 42 |
43 // Time intervals are all in seconds. | 43 // Time intervals are all in seconds. |
44 | 44 |
45 class PLATFORM_EXPORT TimerBase { | 45 class PLATFORM_EXPORT TimerBase { |
46 WTF_MAKE_NONCOPYABLE(TimerBase); | 46 WTF_MAKE_NONCOPYABLE(TimerBase); |
47 | 47 |
48 public: | 48 public: |
49 explicit TimerBase(WebTaskRunner*); | 49 explicit TimerBase(RefPtr<WebTaskRunner>); |
50 virtual ~TimerBase(); | 50 virtual ~TimerBase(); |
51 | 51 |
52 void start(double nextFireInterval, | 52 void start(double nextFireInterval, |
53 double repeatInterval, | 53 double repeatInterval, |
54 const WebTraceLocation&); | 54 const WebTraceLocation&); |
55 | 55 |
56 void startRepeating(double repeatInterval, const WebTraceLocation& caller) { | 56 void startRepeating(double repeatInterval, const WebTraceLocation& caller) { |
57 start(repeatInterval, repeatInterval, caller); | 57 start(repeatInterval, repeatInterval, caller); |
58 } | 58 } |
59 void startOneShot(double interval, const WebTraceLocation& caller) { | 59 void startOneShot(double interval, const WebTraceLocation& caller) { |
(...skipping 13 matching lines...) Expand all Loading... |
73 double now = timerMonotonicallyIncreasingTime(); | 73 double now = timerMonotonicallyIncreasingTime(); |
74 setNextFireTime(now, std::max(m_nextFireTime - now + delta, 0.0)); | 74 setNextFireTime(now, std::max(m_nextFireTime - now + delta, 0.0)); |
75 m_repeatInterval += delta; | 75 m_repeatInterval += delta; |
76 } | 76 } |
77 | 77 |
78 struct PLATFORM_EXPORT Comparator { | 78 struct PLATFORM_EXPORT Comparator { |
79 bool operator()(const TimerBase* a, const TimerBase* b) const; | 79 bool operator()(const TimerBase* a, const TimerBase* b) const; |
80 }; | 80 }; |
81 | 81 |
82 protected: | 82 protected: |
83 static WebTaskRunner* getTimerTaskRunner(); | 83 static RefPtr<WebTaskRunner> getTimerTaskRunner(); |
84 static WebTaskRunner* getUnthrottledTaskRunner(); | 84 static RefPtr<WebTaskRunner> getUnthrottledTaskRunner(); |
85 | 85 |
86 private: | 86 private: |
87 virtual void fired() = 0; | 87 virtual void fired() = 0; |
88 | 88 |
89 virtual WebTaskRunner* timerTaskRunner() const; | 89 virtual RefPtr<WebTaskRunner> timerTaskRunner() const; |
90 | 90 |
91 NO_SANITIZE_ADDRESS | 91 NO_SANITIZE_ADDRESS |
92 virtual bool canFire() const { return true; } | 92 virtual bool canFire() const { return true; } |
93 | 93 |
94 double timerMonotonicallyIncreasingTime() const; | 94 double timerMonotonicallyIncreasingTime() const; |
95 | 95 |
96 void setNextFireTime(double now, double delay); | 96 void setNextFireTime(double now, double delay); |
97 | 97 |
98 void runInternal(); | 98 void runInternal(); |
99 | 99 |
100 double m_nextFireTime; // 0 if inactive | 100 double m_nextFireTime; // 0 if inactive |
101 double m_repeatInterval; // 0 if not repeating | 101 double m_repeatInterval; // 0 if not repeating |
102 WebTraceLocation m_location; | 102 WebTraceLocation m_location; |
103 std::unique_ptr<WebTaskRunner> m_webTaskRunner; | 103 RefPtr<WebTaskRunner> m_webTaskRunner; |
104 | 104 |
105 #if DCHECK_IS_ON() | 105 #if DCHECK_IS_ON() |
106 ThreadIdentifier m_thread; | 106 ThreadIdentifier m_thread; |
107 #endif | 107 #endif |
108 WTF::WeakPtrFactory<TimerBase> m_weakPtrFactory; | 108 WTF::WeakPtrFactory<TimerBase> m_weakPtrFactory; |
109 | 109 |
110 friend class ThreadTimers; | 110 friend class ThreadTimers; |
111 friend class TimerHeapLessThanFunction; | 111 friend class TimerHeapLessThanFunction; |
112 friend class TimerHeapReference; | 112 friend class TimerHeapReference; |
113 }; | 113 }; |
(...skipping 10 matching lines...) Expand all Loading... |
124 static bool isHeapObjectAlive(T* objectPointer) { | 124 static bool isHeapObjectAlive(T* objectPointer) { |
125 return !ThreadHeap::willObjectBeLazilySwept(objectPointer); | 125 return !ThreadHeap::willObjectBeLazilySwept(objectPointer); |
126 } | 126 } |
127 }; | 127 }; |
128 | 128 |
129 template <typename TimerFiredClass> | 129 template <typename TimerFiredClass> |
130 class TaskRunnerTimer : public TimerBase { | 130 class TaskRunnerTimer : public TimerBase { |
131 public: | 131 public: |
132 using TimerFiredFunction = void (TimerFiredClass::*)(TimerBase*); | 132 using TimerFiredFunction = void (TimerFiredClass::*)(TimerBase*); |
133 | 133 |
134 TaskRunnerTimer(WebTaskRunner* webTaskRunner, | 134 TaskRunnerTimer(RefPtr<WebTaskRunner> webTaskRunner, |
135 TimerFiredClass* o, | 135 TimerFiredClass* o, |
136 TimerFiredFunction f) | 136 TimerFiredFunction f) |
137 : TimerBase(webTaskRunner), m_object(o), m_function(f) {} | 137 : TimerBase(std::move(webTaskRunner)), m_object(o), m_function(f) {} |
138 | 138 |
139 ~TaskRunnerTimer() override {} | 139 ~TaskRunnerTimer() override {} |
140 | 140 |
141 protected: | 141 protected: |
142 void fired() override { (m_object->*m_function)(this); } | 142 void fired() override { (m_object->*m_function)(this); } |
143 | 143 |
144 NO_SANITIZE_ADDRESS | 144 NO_SANITIZE_ADDRESS |
145 bool canFire() const override { | 145 bool canFire() const override { |
146 // Oilpan: if a timer fires while Oilpan heaps are being lazily | 146 // Oilpan: if a timer fires while Oilpan heaps are being lazily |
147 // swept, it is not safe to proceed if the object is about to | 147 // swept, it is not safe to proceed if the object is about to |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 inline bool TimerBase::isActive() const { | 198 inline bool TimerBase::isActive() const { |
199 #if DCHECK_IS_ON() | 199 #if DCHECK_IS_ON() |
200 DCHECK_EQ(m_thread, currentThread()); | 200 DCHECK_EQ(m_thread, currentThread()); |
201 #endif | 201 #endif |
202 return m_weakPtrFactory.hasWeakPtrs(); | 202 return m_weakPtrFactory.hasWeakPtrs(); |
203 } | 203 } |
204 | 204 |
205 } // namespace blink | 205 } // namespace blink |
206 | 206 |
207 #endif // Timer_h | 207 #endif // Timer_h |
OLD | NEW |