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

Side by Side Diff: components/mus/surfaces/top_level_display_client.cc

Issue 1881793002: SurfacelessSurfaces for Mus (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix build 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 | « components/mus/surfaces/top_level_display_client.h ('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 2015 The Chromium Authors. All rights reserved. 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 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 "components/mus/surfaces/top_level_display_client.h" 5 #include "components/mus/surfaces/top_level_display_client.h"
6 6
7 #include "base/memory/ptr_util.h"
7 #include "base/thread_task_runner_handle.h" 8 #include "base/thread_task_runner_handle.h"
8 #include "cc/output/compositor_frame.h" 9 #include "cc/output/compositor_frame.h"
9 #include "cc/output/copy_output_request.h" 10 #include "cc/output/copy_output_request.h"
10 #include "cc/scheduler/begin_frame_source.h" 11 #include "cc/scheduler/begin_frame_source.h"
11 #include "cc/surfaces/display.h" 12 #include "cc/surfaces/display.h"
12 #include "cc/surfaces/display_scheduler.h" 13 #include "cc/surfaces/display_scheduler.h"
13 #include "cc/surfaces/surface.h" 14 #include "cc/surfaces/surface.h"
14 #include "components/mus/gles2/gpu_state.h" 15 #include "components/mus/gles2/gpu_state.h"
15 #include "components/mus/surfaces/direct_output_surface.h" 16 #include "components/mus/surfaces/direct_output_surface.h"
16 #include "components/mus/surfaces/surfaces_context_provider.h" 17 #include "components/mus/surfaces/surfaces_context_provider.h"
17 #include "components/mus/surfaces/surfaces_state.h" 18 #include "components/mus/surfaces/surfaces_state.h"
18 19
20 #if defined(USE_OZONE)
21 #include "components/mus/surfaces/direct_output_surface_ozone.h"
22 #include "gpu/command_buffer/client/gles2_interface.h"
23 #endif
24
19 namespace base { 25 namespace base {
20 class SingleThreadTaskRunner; 26 class SingleThreadTaskRunner;
21 } 27 }
22 28
23 namespace mus { 29 namespace mus {
24 namespace { 30 namespace {
25 void CallCallback(const base::Closure& callback, cc::SurfaceDrawStatus status) { 31 void CallCallback(const base::Closure& callback, cc::SurfaceDrawStatus status) {
26 callback.Run(); 32 callback.Run();
27 } 33 }
28 } 34 }
29 35
30 TopLevelDisplayClient::TopLevelDisplayClient( 36 TopLevelDisplayClient::TopLevelDisplayClient(
31 gfx::AcceleratedWidget widget, 37 gfx::AcceleratedWidget widget,
32 const scoped_refptr<GpuState>& gpu_state, 38 const scoped_refptr<GpuState>& gpu_state,
33 const scoped_refptr<SurfacesState>& surfaces_state) 39 const scoped_refptr<SurfacesState>& surfaces_state)
34 : task_runner_(base::ThreadTaskRunnerHandle::Get()), 40 : task_runner_(base::ThreadTaskRunnerHandle::Get()),
35 surfaces_state_(surfaces_state), 41 surfaces_state_(surfaces_state),
36 factory_(surfaces_state->manager(), this), 42 factory_(surfaces_state->manager(), this),
37 cc_id_(static_cast<uint64_t>(surfaces_state->next_id_namespace()) << 32) { 43 cc_id_(static_cast<uint64_t>(surfaces_state->next_id_namespace()) << 32) {
38 factory_.Create(cc_id_); 44 factory_.Create(cc_id_);
39 45
40 display_.reset(new cc::Display(this, surfaces_state_->manager(), nullptr, 46 display_.reset(new cc::Display(this, surfaces_state_->manager(), nullptr,
41 nullptr, cc::RendererSettings())); 47 nullptr, cc::RendererSettings()));
42 48
43 scoped_ptr<cc::OutputSurface> output_surface = 49 scoped_refptr<SurfacesContextProvider> surfaces_context_provider(
44 make_scoped_ptr(new DirectOutputSurface( 50 new SurfacesContextProvider(this, widget, gpu_state));
45 new SurfacesContextProvider(this, widget, gpu_state))); 51 // TODO(rjkroege): If there is something better to do than CHECK, add it.
52 CHECK(surfaces_context_provider->BindToCurrentThread());
53
54 std::unique_ptr<cc::OutputSurface> output_surface;
55 if (surfaces_context_provider->ContextCapabilities().gpu.surfaceless) {
56 #if defined(USE_OZONE)
57 output_surface = base::WrapUnique(new DirectOutputSurfaceOzone(
58 surfaces_context_provider, widget, GL_TEXTURE_2D, GL_RGB));
59 #else
60 NOTREACHED();
61 #endif
62 } else {
63 output_surface =
64 base::WrapUnique(new DirectOutputSurface(surfaces_context_provider));
65 }
46 66
47 int max_frames_pending = output_surface->capabilities().max_frames_pending; 67 int max_frames_pending = output_surface->capabilities().max_frames_pending;
48 DCHECK_GT(max_frames_pending, 0); 68 DCHECK_GT(max_frames_pending, 0);
49 69
50 synthetic_frame_source_.reset(new cc::SyntheticBeginFrameSource( 70 synthetic_frame_source_.reset(new cc::SyntheticBeginFrameSource(
51 task_runner_.get(), cc::BeginFrameArgs::DefaultInterval())); 71 task_runner_.get(), cc::BeginFrameArgs::DefaultInterval()));
52 72
53 scheduler_.reset( 73 scheduler_.reset(
54 new cc::DisplayScheduler(display_.get(), synthetic_frame_source_.get(), 74 new cc::DisplayScheduler(display_.get(), synthetic_frame_source_.get(),
55 task_runner_.get(), max_frames_pending)); 75 task_runner_.get(), max_frames_pending));
56 76
57 if (gpu_state->HardwareRenderingAvailable()) { 77 if (gpu_state->HardwareRenderingAvailable()) {
58 display_->Initialize(std::move(output_surface), scheduler_.get()); 78 display_->Initialize(std::move(output_surface), scheduler_.get());
59 } else { 79 } else {
60 // TODO(rjkroege): Implement software compositing. 80 // TODO(rjkroege): Implement software compositing.
61 } 81 }
62 display_->Resize(last_submitted_frame_size_); 82 display_->Resize(last_submitted_frame_size_);
63 83
64 // TODO(fsamuel): Plumb the proper device scale factor. 84 // TODO(fsamuel): Plumb the proper device scale factor.
65 display_->SetSurfaceId(cc_id_, 1.f /* device_scale_factor */); 85 display_->SetSurfaceId(cc_id_, 1.f /* device_scale_factor */);
66 } 86 }
67 87
68 TopLevelDisplayClient::~TopLevelDisplayClient() { 88 TopLevelDisplayClient::~TopLevelDisplayClient() {
69 factory_.Destroy(cc_id_); 89 factory_.Destroy(cc_id_);
70 } 90 }
71 91
72 void TopLevelDisplayClient::SubmitCompositorFrame( 92 void TopLevelDisplayClient::SubmitCompositorFrame(
73 scoped_ptr<cc::CompositorFrame> frame, 93 std::unique_ptr<cc::CompositorFrame> frame,
74 const base::Closure& callback) { 94 const base::Closure& callback) {
75 pending_frame_ = std::move(frame); 95 pending_frame_ = std::move(frame);
76 96
77 last_submitted_frame_size_ = 97 last_submitted_frame_size_ =
78 pending_frame_->delegated_frame_data->render_pass_list.back() 98 pending_frame_->delegated_frame_data->render_pass_list.back()
79 ->output_rect.size(); 99 ->output_rect.size();
80 display_->Resize(last_submitted_frame_size_); 100 display_->Resize(last_submitted_frame_size_);
81 factory_.SubmitCompositorFrame(cc_id_, std::move(pending_frame_), 101 factory_.SubmitCompositorFrame(cc_id_, std::move(pending_frame_),
82 base::Bind(&CallCallback, callback)); 102 base::Bind(&CallCallback, callback));
83 } 103 }
84 104
85 void TopLevelDisplayClient::RequestCopyOfOutput( 105 void TopLevelDisplayClient::RequestCopyOfOutput(
86 scoped_ptr<cc::CopyOutputRequest> output_request) { 106 std::unique_ptr<cc::CopyOutputRequest> output_request) {
87 factory_.RequestCopyOfSurface(cc_id_, std::move(output_request)); 107 factory_.RequestCopyOfSurface(cc_id_, std::move(output_request));
88 } 108 }
89 109
90 void TopLevelDisplayClient::CommitVSyncParameters(base::TimeTicks timebase, 110 void TopLevelDisplayClient::CommitVSyncParameters(base::TimeTicks timebase,
91 base::TimeDelta interval) {} 111 base::TimeDelta interval) {}
92 112
93 void TopLevelDisplayClient::OutputSurfaceLost() { 113 void TopLevelDisplayClient::OutputSurfaceLost() {
94 if (!display_) // Shutdown case 114 if (!display_) // Shutdown case
95 return; 115 return;
96 display_.reset(); 116 display_.reset();
(...skipping 20 matching lines...) Expand all
117 const cc::ReturnedResourceArray& resources) { 137 const cc::ReturnedResourceArray& resources) {
118 // TODO(fsamuel): Implement this. 138 // TODO(fsamuel): Implement this.
119 } 139 }
120 140
121 void TopLevelDisplayClient::SetBeginFrameSource( 141 void TopLevelDisplayClient::SetBeginFrameSource(
122 cc::BeginFrameSource* begin_frame_source) { 142 cc::BeginFrameSource* begin_frame_source) {
123 // TODO(tansell): Implement this. 143 // TODO(tansell): Implement this.
124 } 144 }
125 145
126 } // namespace mus 146 } // namespace mus
OLDNEW
« no previous file with comments | « components/mus/surfaces/top_level_display_client.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698