Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(14)

Side by Side Diff: Source/core/dom/ScriptedIdleTaskController.cpp

Issue 1119683003: Implement requestIdleCallback API (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "config.h"
6 #include "core/dom/ScriptedIdleTaskController.h"
7
8 #include "core/dom/Document.h"
9 #include "core/dom/IdleRequestCallback.h"
10 #include "core/loader/DocumentLoader.h"
11 #include "platform/Logging.h"
12 #include "platform/TraceEvent.h"
13 #include "public/platform/Platform.h"
14 #include "public/platform/WebScheduler.h"
15 #include "public/platform/WebTraceLocation.h"
16 #include "wtf/CurrentTime.h"
17 #include "wtf/Functional.h"
18
19 namespace blink {
20
21 ScriptedIdleTaskController::ScriptedIdleTaskController(Document* document)
esprehn 2015/06/10 07:11:41 reference
rmcilroy 2015/06/10 18:32:41 Moved to ActiveDOMObject so this isn't needed any
22 : m_document(document)
23 , m_callbacks()
esprehn 2015/06/10 07:11:41 no need to list things with default constructors
rmcilroy 2015/06/10 18:32:40 Done.
24 , m_nextCallbackId(0)
25 {
26 }
27
28 DEFINE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(ScriptedIdleTaskController);
29
30 DEFINE_TRACE(ScriptedIdleTaskController)
31 {
32 #if ENABLE(OILPAN)
33 visitor->trace(m_document);
34 visitor->trace(m_callbacks);
35 #endif
36 }
37
38 ScriptedIdleTaskController::CallbackId ScriptedIdleTaskController::registerCallb ack(IdleRequestCallback* callback)
39 {
40 CallbackId id = ++m_nextCallbackId;
41 callback->m_id = id;
42 callback->m_controller = this;
43 m_callbacks.set(id, callback);
44
45 RefPtr<IdleRequestCallbackWrapper> callbackWrapper = IdleRequestCallbackWrap per::create(callback);
46 Platform::current()->currentThread()->scheduler()->postIdleTask(
esprehn 2015/06/10 07:11:41 Can any of these ever be null? We should either ma
rmcilroy 2015/06/10 18:32:41 They shouldn't return null whenever Blink is initi
47 FROM_HERE, WTF::bind<double>(&ScriptedIdleTaskController::IdleRequestCal lbackWrapper::runCallback, callbackWrapper));
esprehn 2015/06/10 07:11:42 This has scary lifetime management, wouldn't you w
rmcilroy 2015/06/10 18:32:40 It needs some reference to the ScriptedIdleTaskCon
48 // TODO(rmcilroy) TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.t imeline"), "RequestIdleFrame", TRACE_EVENT_SCOPE_THREAD, "data", InspectorIdleFr ameEvent::data(m_document, id));
49 // TODO(rmcilroy) InspectorInstrumentation::didRequestIdleFrame(m_docuement, id);
50 return id;
51 }
52
53 void ScriptedIdleTaskController::runCallback(IdleRequestCallback* callback, doub le deadlineSeconds)
54 {
55 m_callbacks.remove(callback->m_id);
56
57 // TODO(rmcilroy) TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline" ), "FireIdleFrame", "data", InspectorIdleFrameEvent::data(m_document, callback-> m_id));
58 // TODO(rmcilroy) InspectorInstrumentationCookie cookie = InspectorInstrumen tation::willFireIdleFrame(m_document, callback->m_id);
59
60 double highResNowMs = 1000.0 * m_document->loader()->timing().monotonicTimeT oZeroBasedDocumentTime(monotonicallyIncreasingTime());
61 double highResDeadlineMs = 1000.0 * m_document->loader()->timing().monotonic TimeToZeroBasedDocumentTime(deadlineSeconds);
esprehn 2015/06/10 07:11:41 How does the callback use the highResNow? Seems li
rmcilroy 2015/06/10 18:32:41 I've already removed |now| in the latest patch-set
62 callback->handleEvent(highResNowMs, highResDeadlineMs);
63
64 // TODO(rmcilroy) InspectorInstrumentation::didFireIdleFrame(cookie);
65 // TODO(rmcilroy) TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.t imeline"), "UpdateCounters", TRACE_EVENT_SCOPE_THREAD, "data", InspectorUpdateCo untersEvent::data());
66
67 }
68
69 void ScriptedIdleTaskController::cancelCallback(CallbackId id)
70 {
71 IdleRequestCallback* callback = m_callbacks.get(id);
72 if (!callback)
73 return;
74
75 // TODO(rmcilroy) TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.t imeline"), "CancelIdleFrame", TRACE_EVENT_SCOPE_THREAD, "data", InspectorIdleFra meEvent::data(m_document, id));
76 // TODO(rmcilroy) InspectorInstrumentation::didCancelAnimationFrame(m_docume nt, id);
77
78 // Cancel callback by clearing its reference to the controller.
79 callback->m_controller.clear();
esprehn 2015/06/10 07:11:41 If we just post ids you don't need this.
rmcilroy 2015/06/10 18:32:41 Done.
80 m_callbacks.remove(id);
81 }
82
83 ScriptedIdleTaskController::IdleRequestCallbackWrapper::IdleRequestCallbackWrapp er(IdleRequestCallback* callback)
84 : m_callback(callback)
85 {
86 }
87
88 ScriptedIdleTaskController::IdleRequestCallbackWrapper::~IdleRequestCallbackWrap per()
89 {
90 }
91
92 // static
93 void ScriptedIdleTaskController::IdleRequestCallbackWrapper::runCallback(PassRef Ptr<IdleRequestCallbackWrapper> callbackWrapper, double deadlineSeconds)
94 {
95 IdleRequestCallback* callback = callbackWrapper->m_callback;
96 RefPtrWillBeRawPtr<ScriptedIdleTaskController> controller = callback->m_cont roller;
97 if (!controller)
98 return;
99
100 controller->runCallback(callback, deadlineSeconds);
101 }
102
103 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698