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

Unified Diff: third_party/WebKit/Source/platform/graphics/OffscreenCanvasFrameDispatcherImpl.cpp

Issue 2644653003: Make OffscreenCanvas animation in sync with its placeholder canvas's parent frame rate (Closed)
Patch Set: fix based on fsamuel's feedback Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/platform/graphics/OffscreenCanvasFrameDispatcherImpl.cpp
diff --git a/third_party/WebKit/Source/platform/graphics/OffscreenCanvasFrameDispatcherImpl.cpp b/third_party/WebKit/Source/platform/graphics/OffscreenCanvasFrameDispatcherImpl.cpp
index 984731ad183bfb040af56267ed74a04d6043a560..3305cadd14dffd73dc904d8f8b87e580da9defed 100644
--- a/third_party/WebKit/Source/platform/graphics/OffscreenCanvasFrameDispatcherImpl.cpp
+++ b/third_party/WebKit/Source/platform/graphics/OffscreenCanvasFrameDispatcherImpl.cpp
@@ -27,12 +27,6 @@
namespace blink {
-// This constant specifies the maximum number of pixel buffer that are allowed
-// to co-exist at a given time. The minimum number is 2 (double buffered).
-// larger numbers can help maintain a steadier frame rates, but they increase
-// latency.
-const int kMaximumOffscreenCanvasBufferCount = 3;
-
OffscreenCanvasFrameDispatcherImpl::OffscreenCanvasFrameDispatcherImpl(
OffscreenCanvasFrameDispatcherClient* client,
uint32_t clientId,
@@ -45,6 +39,7 @@ OffscreenCanvasFrameDispatcherImpl::OffscreenCanvasFrameDispatcherImpl(
m_width(width),
m_height(height),
m_changeSizeForNextCommit(false),
+ m_needsBeginFrame(false),
m_nextResourceId(1u),
m_binding(this),
m_placeholderCanvasId(canvasId) {
@@ -59,7 +54,6 @@ OffscreenCanvasFrameDispatcherImpl::OffscreenCanvasFrameDispatcherImpl(
}
OffscreenCanvasFrameDispatcherImpl::~OffscreenCanvasFrameDispatcherImpl() {
- m_syntheticBeginFrameTask.cancel();
}
void OffscreenCanvasFrameDispatcherImpl::setTransferableResourceToSharedBitmap(
@@ -371,44 +365,26 @@ void OffscreenCanvasFrameDispatcherImpl::dispatchFrame(
m_currentLocalFrameId = m_surfaceIdAllocator.GenerateId();
m_changeSizeForNextCommit = false;
}
- m_sink->SubmitCompositorFrame(m_currentLocalFrameId, std::move(frame));
-
- // TODO(crbug.com/674744): Get BeginFrame to fire on its own.
- scheduleSyntheticBeginFrame();
-}
-void OffscreenCanvasFrameDispatcherImpl::scheduleSyntheticBeginFrame() {
- m_syntheticBeginFrameTask =
- Platform::current()
- ->currentThread()
- ->getWebTaskRunner()
- ->postDelayedCancellableTask(
- BLINK_FROM_HERE,
- WTF::bind(&OffscreenCanvasFrameDispatcherImpl::OnBeginFrame,
- WTF::unretained(this), cc::BeginFrameArgs()),
- 16);
+ m_sink->SubmitCompositorFrame(m_currentLocalFrameId, std::move(frame));
}
void OffscreenCanvasFrameDispatcherImpl::DidReceiveCompositorFrameAck() {
// TODO(fsamuel): Implement this.
}
+void OffscreenCanvasFrameDispatcherImpl::setNeedsBeginFrame(
+ bool doesNeedBeginFrame) {
Justin Novosad 2017/01/19 18:06:49 This name doesNeedBeginFrame is a bit awkward. Jus
xlai (Olivia) 2017/01/19 19:14:34 Done.
+ if (doesNeedBeginFrame != m_needsBeginFrame) {
+ m_needsBeginFrame = doesNeedBeginFrame;
+ m_sink->SetNeedsBeginFrame(doesNeedBeginFrame);
+ }
+}
+
void OffscreenCanvasFrameDispatcherImpl::OnBeginFrame(
const cc::BeginFrameArgs& beginFrameArgs) {
- if (!client())
- return;
- unsigned framesInFlight = m_cachedImages.size() + m_sharedBitmaps.size() +
- m_cachedTextureIds.size();
-
- // Limit the rate of compositor commits.
- if (framesInFlight < kMaximumOffscreenCanvasBufferCount) {
+ if (client())
client()->beginFrame();
- } else {
- // TODO(crbug.com/674744): Get BeginFrame to fire on its own.
- // The following call is to reschedule the frame in cases where we encounter
- // a backlog.
- scheduleSyntheticBeginFrame();
- }
}
void OffscreenCanvasFrameDispatcherImpl::ReclaimResources(

Powered by Google App Engine
This is Rietveld 408576698