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

Side by Side Diff: content/browser/compositor/browser_compositor_output_surface.cc

Issue 2465093002: cc: Add OutputSurface state snapshots.
Patch Set: rebase 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/compositor/browser_compositor_output_surface.h" 5 #include "content/browser/compositor/browser_compositor_output_surface.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
11 #include "base/location.h" 11 #include "base/location.h"
12 #include "base/memory/ptr_util.h" 12 #include "base/memory/ptr_util.h"
13 #include "base/strings/string_number_conversions.h" 13 #include "base/strings/string_number_conversions.h"
14 #include "cc/output/output_surface_client.h" 14 #include "cc/output/output_surface_client.h"
15 #include "cc/scheduler/begin_frame_source.h" 15 #include "cc/scheduler/begin_frame_source.h"
16 #include "components/display_compositor/compositor_overlay_candidate_validator.h " 16 #include "components/display_compositor/compositor_overlay_candidate_validator.h "
17 #include "content/browser/compositor/reflector_impl.h" 17 #include "content/browser/compositor/reflector_impl.h"
18 #include "services/ui/public/cpp/gpu/context_provider_command_buffer.h" 18 #include "services/ui/public/cpp/gpu/context_provider_command_buffer.h"
19 19
20 namespace content { 20 namespace content {
21 21
22 BrowserCompositorOutputSurface::BrowserCompositorOutputSurface( 22 BrowserCompositorOutputSurface::BrowserCompositorOutputSurface(
23 scoped_refptr<cc::ContextProvider> context_provider, 23 scoped_refptr<cc::ContextProvider> context_provider,
24 const UpdateVSyncParametersCallback& update_vsync_parameters_callback, 24 const UpdateVSyncParametersCallback& update_vsync_parameters_callback,
25 std::unique_ptr<display_compositor::CompositorOverlayCandidateValidator> 25 std::unique_ptr<display_compositor::CompositorOverlayCandidateValidator>
26 overlay_candidate_validator) 26 overlay_candidate_validator)
27 : OutputSurface(std::move(context_provider)), 27 : OutputSurface(std::move(context_provider)),
28 update_vsync_parameters_callback_(update_vsync_parameters_callback),
29 reflector_(nullptr) { 28 reflector_(nullptr) {
30 overlay_candidate_validator_ = std::move(overlay_candidate_validator); 29 overlay_candidate_validator_ = std::move(overlay_candidate_validator);
30 update_vsync_parameters_callback_ = base::Bind(
31 &BrowserCompositorOutputSurface::OnUpdateVSyncParametersFromGpu,
32 base::Unretained(this), update_vsync_parameters_callback);
31 } 33 }
32 34
33 BrowserCompositorOutputSurface::BrowserCompositorOutputSurface( 35 BrowserCompositorOutputSurface::BrowserCompositorOutputSurface(
34 std::unique_ptr<cc::SoftwareOutputDevice> software_device, 36 std::unique_ptr<cc::SoftwareOutputDevice> software_device,
35 const UpdateVSyncParametersCallback& update_vsync_parameters_callback) 37 const UpdateVSyncParametersCallback& update_vsync_parameters_callback)
36 : OutputSurface(std::move(software_device)), 38 : OutputSurface(std::move(software_device)), reflector_(nullptr) {
37 update_vsync_parameters_callback_(update_vsync_parameters_callback), 39 update_vsync_parameters_callback_ = base::Bind(
38 reflector_(nullptr) {} 40 &BrowserCompositorOutputSurface::OnUpdateVSyncParametersFromGpu,
41 base::Unretained(this), update_vsync_parameters_callback);
42 }
39 43
40 BrowserCompositorOutputSurface::BrowserCompositorOutputSurface( 44 BrowserCompositorOutputSurface::BrowserCompositorOutputSurface(
41 const scoped_refptr<cc::VulkanContextProvider>& vulkan_context_provider, 45 const scoped_refptr<cc::VulkanContextProvider>& vulkan_context_provider,
42 const UpdateVSyncParametersCallback& update_vsync_parameters_callback) 46 const UpdateVSyncParametersCallback& update_vsync_parameters_callback)
43 : OutputSurface(std::move(vulkan_context_provider)), 47 : OutputSurface(std::move(vulkan_context_provider)), reflector_(nullptr) {
44 update_vsync_parameters_callback_(update_vsync_parameters_callback), 48 update_vsync_parameters_callback_ = base::Bind(
45 reflector_(nullptr) {} 49 &BrowserCompositorOutputSurface::OnUpdateVSyncParametersFromGpu,
50 base::Unretained(this), update_vsync_parameters_callback);
51 }
46 52
47 BrowserCompositorOutputSurface::~BrowserCompositorOutputSurface() { 53 BrowserCompositorOutputSurface::~BrowserCompositorOutputSurface() {
48 if (reflector_) 54 if (reflector_)
49 reflector_->DetachFromOutputSurface(); 55 reflector_->DetachFromOutputSurface();
50 DCHECK(!reflector_); 56 DCHECK(!reflector_);
51 } 57 }
52 58
59 void BrowserCompositorOutputSurface::OnUpdateVSyncParametersFromGpu(
60 const UpdateVSyncParametersCallback& callback,
61 base::TimeTicks timebase,
62 base::TimeDelta interval) {
63 last_vsync_timebase_ = timebase;
64 callback.Run(timebase, interval);
65 }
66
53 void BrowserCompositorOutputSurface::SetReflector(ReflectorImpl* reflector) { 67 void BrowserCompositorOutputSurface::SetReflector(ReflectorImpl* reflector) {
54 // Software mirroring is done by doing a GL copy out of the framebuffer - if 68 // Software mirroring is done by doing a GL copy out of the framebuffer - if
55 // we have overlays then that data will be missing. 69 // we have overlays then that data will be missing.
56 if (overlay_candidate_validator_) { 70 if (overlay_candidate_validator_) {
57 overlay_candidate_validator_->SetSoftwareMirrorMode(reflector != nullptr); 71 overlay_candidate_validator_->SetSoftwareMirrorMode(reflector != nullptr);
58 } 72 }
59 reflector_ = reflector; 73 reflector_ = reflector;
60 74
61 OnReflectorChanged(); 75 OnReflectorChanged();
62 } 76 }
63 77
64 void BrowserCompositorOutputSurface::OnReflectorChanged() { 78 void BrowserCompositorOutputSurface::OnReflectorChanged() {
65 } 79 }
66 80
67 cc::OverlayCandidateValidator* 81 cc::OverlayCandidateValidator*
68 BrowserCompositorOutputSurface::GetOverlayCandidateValidator() const { 82 BrowserCompositorOutputSurface::GetOverlayCandidateValidator() const {
69 return overlay_candidate_validator_.get(); 83 return overlay_candidate_validator_.get();
70 } 84 }
71 85
72 bool BrowserCompositorOutputSurface::HasExternalStencilTest() const { 86 bool BrowserCompositorOutputSurface::HasExternalStencilTest() const {
73 return false; 87 return false;
74 } 88 }
75 89
76 void BrowserCompositorOutputSurface::ApplyExternalStencil() {} 90 void BrowserCompositorOutputSurface::ApplyExternalStencil() {}
77 91
78 } // namespace content 92 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698