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

Side by Side Diff: content/browser/renderer_host/compositor_impl_android.cc

Issue 1879833002: Android: Browser-side scheduling latency tweaks (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 8 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 | « chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/browser/renderer_host/compositor_impl_android.h" 5 #include "content/browser/renderer_host/compositor_impl_android.h"
6 6
7 #include <android/bitmap.h> 7 #include <android/bitmap.h>
8 #include <android/native_window_jni.h> 8 #include <android/native_window_jni.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 public CompositorImpl::VSyncObserver { 79 public CompositorImpl::VSyncObserver {
80 public: 80 public:
81 ExternalBeginFrameSource(CompositorImpl* compositor) 81 ExternalBeginFrameSource(CompositorImpl* compositor)
82 : compositor_(compositor) { 82 : compositor_(compositor) {
83 compositor_->AddObserver(this); 83 compositor_->AddObserver(this);
84 } 84 }
85 85
86 ~ExternalBeginFrameSource() override { compositor_->RemoveObserver(this); } 86 ~ExternalBeginFrameSource() override { compositor_->RemoveObserver(this); }
87 87
88 // cc::BeginFrameSourceBase implementation: 88 // cc::BeginFrameSourceBase implementation:
89 void AddObserver(cc::BeginFrameObserver* obs) override {
90 cc::BeginFrameSourceBase::AddObserver(obs);
91 DCHECK(needs_begin_frames());
92 if (!last_begin_frame_args_.IsValid())
93 return;
94
95 // Send a MISSED begin frame if necessary.
96 cc::BeginFrameArgs last_args = obs->LastUsedBeginFrameArgs();
97 if (!last_args.IsValid() ||
98 (last_begin_frame_args_.frame_time > last_args.frame_time)) {
99 last_begin_frame_args_.type = cc::BeginFrameArgs::MISSED;
100 // TODO(crbug.com/602485): A deadline doesn't make too much sense
101 // for a missed BeginFrame (the intention rather is 'immediately'),
102 // but currently the retro frame logic is very strict in discarding
103 // BeginFrames.
104 last_begin_frame_args_.deadline =
105 base::TimeTicks::Now() + last_begin_frame_args_.interval;
106 obs->OnBeginFrame(last_begin_frame_args_);
107 }
108 }
109
89 void OnNeedsBeginFramesChanged(bool needs_begin_frames) override { 110 void OnNeedsBeginFramesChanged(bool needs_begin_frames) override {
111 TRACE_EVENT1("compositor", "OnNeedsBeginFramesChanged",
112 "needs_begin_frames", needs_begin_frames);
90 compositor_->OnNeedsBeginFramesChange(needs_begin_frames); 113 compositor_->OnNeedsBeginFramesChange(needs_begin_frames);
91 } 114 }
92 115
93 // CompositorImpl::VSyncObserver implementation: 116 // CompositorImpl::VSyncObserver implementation:
94 void OnVSync(base::TimeTicks frame_time, 117 void OnVSync(base::TimeTicks frame_time,
95 base::TimeDelta vsync_period) override { 118 base::TimeDelta vsync_period) override {
96 CallOnBeginFrame(cc::BeginFrameArgs::Create( 119 base::TimeTicks deadline = std::max(base::TimeTicks::Now(), frame_time);
97 BEGINFRAME_FROM_HERE, frame_time, base::TimeTicks::Now(), vsync_period, 120 last_begin_frame_args_ =
98 cc::BeginFrameArgs::NORMAL)); 121 cc::BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, frame_time, deadline,
122 vsync_period, cc::BeginFrameArgs::NORMAL);
123 CallOnBeginFrame(last_begin_frame_args_);
99 } 124 }
100 125
101 private: 126 private:
102 CompositorImpl* compositor_; 127 CompositorImpl* compositor_;
128 cc::BeginFrameArgs last_begin_frame_args_;
103 }; 129 };
104 130
105 // Used to override capabilities_.adjust_deadline_for_parent to false 131 // Used to override capabilities_.adjust_deadline_for_parent to false
106 class OutputSurfaceWithoutParent : public cc::OutputSurface, 132 class OutputSurfaceWithoutParent : public cc::OutputSurface,
107 public CompositorImpl::VSyncObserver { 133 public CompositorImpl::VSyncObserver {
108 public: 134 public:
109 OutputSurfaceWithoutParent( 135 OutputSurfaceWithoutParent(
110 CompositorImpl* compositor, 136 CompositorImpl* compositor,
111 const scoped_refptr<ContextProviderCommandBuffer>& context_provider, 137 const scoped_refptr<ContextProviderCommandBuffer>& context_provider,
112 const base::Callback<void(gpu::Capabilities)>& 138 const base::Callback<void(gpu::Capabilities)>&
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 434
409 void CompositorImpl::SetHasTransparentBackground(bool flag) { 435 void CompositorImpl::SetHasTransparentBackground(bool flag) {
410 has_transparent_background_ = flag; 436 has_transparent_background_ = flag;
411 if (host_) 437 if (host_)
412 host_->set_has_transparent_background(flag); 438 host_->set_has_transparent_background(flag);
413 } 439 }
414 440
415 void CompositorImpl::SetNeedsComposite() { 441 void CompositorImpl::SetNeedsComposite() {
416 if (!host_->visible()) 442 if (!host_->visible())
417 return; 443 return;
444 TRACE_EVENT0("compositor", "Compositor::SetNeedsComposite");
418 host_->SetNeedsAnimate(); 445 host_->SetNeedsAnimate();
419 } 446 }
420 447
421 void CompositorImpl::UpdateLayerTreeHost() { 448 void CompositorImpl::UpdateLayerTreeHost() {
422 client_->UpdateLayerTreeHost(); 449 client_->UpdateLayerTreeHost();
423 if (needs_animate_) { 450 if (needs_animate_) {
424 needs_animate_ = false; 451 needs_animate_ = false;
425 root_window_->Animate(base::TimeTicks::Now()); 452 root_window_->Animate(base::TimeTicks::Now());
426 } 453 }
427 } 454 }
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
588 void CompositorImpl::AddObserver(VSyncObserver* observer) { 615 void CompositorImpl::AddObserver(VSyncObserver* observer) {
589 observer_list_.AddObserver(observer); 616 observer_list_.AddObserver(observer);
590 } 617 }
591 618
592 void CompositorImpl::RemoveObserver(VSyncObserver* observer) { 619 void CompositorImpl::RemoveObserver(VSyncObserver* observer) {
593 observer_list_.RemoveObserver(observer); 620 observer_list_.RemoveObserver(observer);
594 } 621 }
595 622
596 cc::UIResourceId CompositorImpl::CreateUIResource( 623 cc::UIResourceId CompositorImpl::CreateUIResource(
597 cc::UIResourceClient* client) { 624 cc::UIResourceClient* client) {
625 TRACE_EVENT0("compositor", "CompositorImpl::CreateUIResource");
598 return host_->CreateUIResource(client); 626 return host_->CreateUIResource(client);
599 } 627 }
600 628
601 void CompositorImpl::DeleteUIResource(cc::UIResourceId resource_id) { 629 void CompositorImpl::DeleteUIResource(cc::UIResourceId resource_id) {
630 TRACE_EVENT0("compositor", "CompositorImpl::DeleteUIResource");
602 host_->DeleteUIResource(resource_id); 631 host_->DeleteUIResource(resource_id);
603 } 632 }
604 633
605 bool CompositorImpl::SupportsETC1NonPowerOfTwo() const { 634 bool CompositorImpl::SupportsETC1NonPowerOfTwo() const {
606 return gpu_capabilities_.texture_format_etc1_npot; 635 return gpu_capabilities_.texture_format_etc1_npot;
607 } 636 }
608 637
609 void CompositorImpl::DidPostSwapBuffers() { 638 void CompositorImpl::DidPostSwapBuffers() {
610 TRACE_EVENT0("compositor", "CompositorImpl::DidPostSwapBuffers"); 639 TRACE_EVENT0("compositor", "CompositorImpl::DidPostSwapBuffers");
611 pending_swapbuffers_++; 640 pending_swapbuffers_++;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 needs_begin_frames_ = needs_begin_frames; 681 needs_begin_frames_ = needs_begin_frames;
653 if (needs_begin_frames_) 682 if (needs_begin_frames_)
654 root_window_->RequestVSyncUpdate(); 683 root_window_->RequestVSyncUpdate();
655 } 684 }
656 685
657 void CompositorImpl::SetNeedsAnimate() { 686 void CompositorImpl::SetNeedsAnimate() {
658 needs_animate_ = true; 687 needs_animate_ = true;
659 if (!host_->visible()) 688 if (!host_->visible())
660 return; 689 return;
661 690
691 TRACE_EVENT0("compositor", "Compositor::SetNeedsAnimate");
662 host_->SetNeedsAnimate(); 692 host_->SetNeedsAnimate();
663 } 693 }
664 694
665 } // namespace content 695 } // namespace content
OLDNEW
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698