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

Side by Side Diff: cc/trees/single_thread_proxy.cc

Issue 2769823002: Add decode() functionality to image elements. (Closed)
Patch Set: rebase Created 3 years, 6 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
« no previous file with comments | « cc/trees/single_thread_proxy.h ('k') | content/renderer/gpu/render_widget_compositor.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/trees/single_thread_proxy.h" 5 #include "cc/trees/single_thread_proxy.h"
6 6
7 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "base/profiler/scoped_tracker.h" 9 #include "base/profiler/scoped_tracker.h"
10 #include "base/trace_event/trace_event.h" 10 #include "base/trace_event/trace_event.h"
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 layer_tree_host_impl_->BeginCommit(); 200 layer_tree_host_impl_->BeginCommit();
201 201
202 if (layer_tree_host_impl_->EvictedUIResourcesExist()) 202 if (layer_tree_host_impl_->EvictedUIResourcesExist())
203 layer_tree_host_->GetUIResourceManager()->RecreateUIResources(); 203 layer_tree_host_->GetUIResourceManager()->RecreateUIResources();
204 204
205 layer_tree_host_->FinishCommitOnImplThread(layer_tree_host_impl_.get()); 205 layer_tree_host_->FinishCommitOnImplThread(layer_tree_host_impl_.get());
206 206
207 if (scheduler_on_impl_thread_) 207 if (scheduler_on_impl_thread_)
208 scheduler_on_impl_thread_->DidCommit(); 208 scheduler_on_impl_thread_->DidCommit();
209 209
210 // Issue decode callbacks. 210 IssueImageDecodeFinishedCallbacks();
211 auto completed_decode_callbacks =
212 layer_tree_host_impl_->TakeCompletedImageDecodeCallbacks();
213 for (auto& callback : completed_decode_callbacks)
214 callback.Run();
215
216 layer_tree_host_impl_->CommitComplete(); 211 layer_tree_host_impl_->CommitComplete();
217 212
218 // Commit goes directly to the active tree, but we need to synchronously 213 // Commit goes directly to the active tree, but we need to synchronously
219 // "activate" the tree still during commit to satisfy any potential 214 // "activate" the tree still during commit to satisfy any potential
220 // SetNextCommitWaitsForActivation calls. Unfortunately, the tree 215 // SetNextCommitWaitsForActivation calls. Unfortunately, the tree
221 // might not be ready to draw, so DidActivateSyncTree must set 216 // might not be ready to draw, so DidActivateSyncTree must set
222 // the flag to force the tree to not draw until textures are ready. 217 // the flag to force the tree to not draw until textures are ready.
223 NotifyReadyToActivate(); 218 NotifyReadyToActivate();
224 } 219 }
225 } 220 }
226 221
222 void SingleThreadProxy::IssueImageDecodeFinishedCallbacks() {
223 DCHECK(task_runner_provider_->IsImplThread());
224
225 auto completed_decode_callbacks =
226 layer_tree_host_impl_->TakeCompletedImageDecodeCallbacks();
227 for (auto& callback : completed_decode_callbacks)
228 callback.Run();
229 }
230
227 void SingleThreadProxy::CommitComplete() { 231 void SingleThreadProxy::CommitComplete() {
228 // Commit complete happens on the main side after activate to satisfy any 232 // Commit complete happens on the main side after activate to satisfy any
229 // SetNextCommitWaitsForActivation calls. 233 // SetNextCommitWaitsForActivation calls.
230 DCHECK(!layer_tree_host_impl_->pending_tree()) 234 DCHECK(!layer_tree_host_impl_->pending_tree())
231 << "Activation is expected to have synchronously occurred by now."; 235 << "Activation is expected to have synchronously occurred by now.";
232 DCHECK(commit_blocking_task_runner_); 236 DCHECK(commit_blocking_task_runner_);
233 237
234 DebugScopedSetMainThread main(task_runner_provider_); 238 DebugScopedSetMainThread main(task_runner_provider_);
235 commit_blocking_task_runner_.reset(); 239 commit_blocking_task_runner_.reset();
236 layer_tree_host_->CommitComplete(); 240 layer_tree_host_->CommitComplete();
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 void SingleThreadProxy::OnDrawForCompositorFrameSink( 443 void SingleThreadProxy::OnDrawForCompositorFrameSink(
440 bool resourceless_software_draw) { 444 bool resourceless_software_draw) {
441 NOTREACHED() << "Implemented by ThreadProxy for synchronous compositor."; 445 NOTREACHED() << "Implemented by ThreadProxy for synchronous compositor.";
442 } 446 }
443 447
444 void SingleThreadProxy::NeedsImplSideInvalidation() { 448 void SingleThreadProxy::NeedsImplSideInvalidation() {
445 DCHECK(scheduler_on_impl_thread_); 449 DCHECK(scheduler_on_impl_thread_);
446 scheduler_on_impl_thread_->SetNeedsImplSideInvalidation(); 450 scheduler_on_impl_thread_->SetNeedsImplSideInvalidation();
447 } 451 }
448 452
453 void SingleThreadProxy::NotifyImageDecodeRequestFinished() {
454 // If we don't have a scheduler, then just issue the callbacks here.
455 // Otherwise, schedule a commit.
456 if (!scheduler_on_impl_thread_) {
457 DebugScopedSetMainThreadBlocked main_thread_blocked(task_runner_provider_);
458 DebugScopedSetImplThread impl(task_runner_provider_);
459
460 IssueImageDecodeFinishedCallbacks();
461 return;
462 }
463 SetNeedsCommitOnImplThread();
464 }
465
449 void SingleThreadProxy::CompositeImmediately(base::TimeTicks frame_begin_time) { 466 void SingleThreadProxy::CompositeImmediately(base::TimeTicks frame_begin_time) {
450 TRACE_EVENT0("cc,benchmark", "SingleThreadProxy::CompositeImmediately"); 467 TRACE_EVENT0("cc,benchmark", "SingleThreadProxy::CompositeImmediately");
451 DCHECK(task_runner_provider_->IsMainThread()); 468 DCHECK(task_runner_provider_->IsMainThread());
452 #if DCHECK_IS_ON() 469 #if DCHECK_IS_ON()
453 DCHECK(!inside_impl_frame_); 470 DCHECK(!inside_impl_frame_);
454 #endif 471 #endif
455 base::AutoReset<bool> inside_composite(&inside_synchronous_composite_, true); 472 base::AutoReset<bool> inside_composite(&inside_synchronous_composite_, true);
456 473
457 if (compositor_frame_sink_lost_) { 474 if (compositor_frame_sink_lost_) {
458 RequestNewCompositorFrameSink(); 475 RequestNewCompositorFrameSink();
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after
810 void SingleThreadProxy::DidNotProduceFrame(const BeginFrameAck& ack) { 827 void SingleThreadProxy::DidNotProduceFrame(const BeginFrameAck& ack) {
811 DebugScopedSetImplThread impl(task_runner_provider_); 828 DebugScopedSetImplThread impl(task_runner_provider_);
812 layer_tree_host_impl_->DidNotProduceFrame(ack); 829 layer_tree_host_impl_->DidNotProduceFrame(ack);
813 } 830 }
814 831
815 void SingleThreadProxy::DidReceiveCompositorFrameAck() { 832 void SingleThreadProxy::DidReceiveCompositorFrameAck() {
816 layer_tree_host_->DidReceiveCompositorFrameAck(); 833 layer_tree_host_->DidReceiveCompositorFrameAck();
817 } 834 }
818 835
819 } // namespace cc 836 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/single_thread_proxy.h ('k') | content/renderer/gpu/render_widget_compositor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698