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

Side by Side Diff: services/ui/ws/platform_display_default.cc

Issue 2694043003: FrameGenerator should not be created until an AcceleratedWidget is available (Closed)
Patch Set: c Created 3 years, 10 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 | « services/ui/ws/platform_display_default.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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "services/ui/ws/platform_display_default.h" 5 #include "services/ui/ws/platform_display_default.h"
6 6
7 #include "base/memory/ptr_util.h" 7 #include "base/memory/ptr_util.h"
8 #include "gpu/ipc/client/gpu_channel_host.h" 8 #include "gpu/ipc/client/gpu_channel_host.h"
9 #include "services/ui/display/screen_manager.h" 9 #include "services/ui/display/screen_manager.h"
10 #include "services/ui/ws/platform_display_init_params.h" 10 #include "services/ui/ws/platform_display_init_params.h"
(...skipping 17 matching lines...) Expand all
28 28
29 namespace ui { 29 namespace ui {
30 namespace ws { 30 namespace ws {
31 31
32 PlatformDisplayDefault::PlatformDisplayDefault( 32 PlatformDisplayDefault::PlatformDisplayDefault(
33 const PlatformDisplayInitParams& init_params) 33 const PlatformDisplayInitParams& init_params)
34 : display_id_(init_params.display_id), 34 : display_id_(init_params.display_id),
35 #if !defined(OS_ANDROID) 35 #if !defined(OS_ANDROID)
36 image_cursors_(new ImageCursors), 36 image_cursors_(new ImageCursors),
37 #endif 37 #endif
38 frame_generator_(new FrameGenerator(this, init_params.root_window)),
39 metrics_(init_params.metrics), 38 metrics_(init_params.metrics),
40 widget_(gfx::kNullAcceleratedWidget) { 39 widget_(gfx::kNullAcceleratedWidget),
41 frame_generator_->SetDeviceScaleFactor( 40 root_window_(init_params.root_window),
42 init_params.metrics.device_scale_factor); 41 init_device_scale_factor_(init_params.metrics.device_scale_factor) {
43 } 42 }
44 43
45 PlatformDisplayDefault::~PlatformDisplayDefault() { 44 PlatformDisplayDefault::~PlatformDisplayDefault() {
46 // Don't notify the delegate from the destructor. 45 // Don't notify the delegate from the destructor.
47 delegate_ = nullptr; 46 delegate_ = nullptr;
48 47
49 frame_generator_.reset(); 48 frame_generator_.reset();
50 // Destroy the PlatformWindow early on as it may call us back during 49 // Destroy the PlatformWindow early on as it may call us back during
51 // destruction and we want to be in a known state. But destroy the surface 50 // destruction and we want to be in a known state. But destroy the surface
52 // first because it can still be using the platform window. 51 // first because it can still be using the platform window.
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 if (metrics_ == metrics) 140 if (metrics_ == metrics)
142 return false; 141 return false;
143 142
144 gfx::Rect bounds = platform_window_->GetBounds(); 143 gfx::Rect bounds = platform_window_->GetBounds();
145 if (bounds.size() != metrics.pixel_size) { 144 if (bounds.size() != metrics.pixel_size) {
146 bounds.set_size(metrics.pixel_size); 145 bounds.set_size(metrics.pixel_size);
147 platform_window_->SetBounds(bounds); 146 platform_window_->SetBounds(bounds);
148 } 147 }
149 148
150 metrics_ = metrics; 149 metrics_ = metrics;
151 frame_generator_->SetDeviceScaleFactor(metrics_.device_scale_factor); 150 if (frame_generator_)
151 frame_generator_->SetDeviceScaleFactor(metrics_.device_scale_factor);
152 return true; 152 return true;
153 } 153 }
154 154
155 const display::ViewportMetrics& PlatformDisplayDefault::GetViewportMetrics() 155 const display::ViewportMetrics& PlatformDisplayDefault::GetViewportMetrics()
156 const { 156 const {
157 return metrics_; 157 return metrics_;
158 } 158 }
159 159
160 gfx::AcceleratedWidget PlatformDisplayDefault::GetAcceleratedWidget() const { 160 gfx::AcceleratedWidget PlatformDisplayDefault::GetAcceleratedWidget() const {
161 return widget_; 161 return widget_;
162 } 162 }
163 163
164 void PlatformDisplayDefault::UpdateEventRootLocation(ui::LocatedEvent* event) { 164 void PlatformDisplayDefault::UpdateEventRootLocation(ui::LocatedEvent* event) {
165 gfx::Point location = event->location(); 165 gfx::Point location = event->location();
166 location.Offset(metrics_.bounds.x(), metrics_.bounds.y()); 166 location.Offset(metrics_.bounds.x(), metrics_.bounds.y());
167 event->set_root_location(location); 167 event->set_root_location(location);
168 } 168 }
169 169
170 void PlatformDisplayDefault::OnBoundsChanged(const gfx::Rect& new_bounds) { 170 void PlatformDisplayDefault::OnBoundsChanged(const gfx::Rect& new_bounds) {
171 // We only care if the window size has changed. 171 // We only care if the window size has changed.
172 if (new_bounds.size() == metrics_.pixel_size) 172 if (new_bounds.size() == metrics_.pixel_size)
173 return; 173 return;
174 174
175 // TODO(kylechar): Maybe do something here. For CrOS we don't need to support 175 // TODO(kylechar): Maybe do something here. For CrOS we don't need to support
176 // PlatformWindow initiated resizes. For other platforms we need to do 176 // PlatformWindow initiated resizes. For other platforms we need to do
177 // something but that isn't fully flushed out. 177 // something but that isn't fully flushed out.
178 } 178 }
179 179
180 void PlatformDisplayDefault::OnDamageRect(const gfx::Rect& damaged_region) { 180 void PlatformDisplayDefault::OnDamageRect(const gfx::Rect& damaged_region) {
181 frame_generator_->OnWindowDamaged(); 181 if (frame_generator_)
182 frame_generator_->OnWindowDamaged();
182 } 183 }
183 184
184 void PlatformDisplayDefault::DispatchEvent(ui::Event* event) { 185 void PlatformDisplayDefault::DispatchEvent(ui::Event* event) {
185 if (event->IsLocatedEvent()) 186 if (event->IsLocatedEvent())
186 UpdateEventRootLocation(event->AsLocatedEvent()); 187 UpdateEventRootLocation(event->AsLocatedEvent());
187 188
188 if (event->IsScrollEvent()) { 189 if (event->IsScrollEvent()) {
189 // TODO(moshayedi): crbug.com/602859. Dispatch scroll events as 190 // TODO(moshayedi): crbug.com/602859. Dispatch scroll events as
190 // they are once we have proper support for scroll events. 191 // they are once we have proper support for scroll events.
191 delegate_->OnEvent( 192 delegate_->OnEvent(
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 241
241 void PlatformDisplayDefault::OnAcceleratedWidgetAvailable( 242 void PlatformDisplayDefault::OnAcceleratedWidgetAvailable(
242 gfx::AcceleratedWidget widget, 243 gfx::AcceleratedWidget widget,
243 float device_scale_factor) { 244 float device_scale_factor) {
244 // This will get called after Init() is called, either synchronously as part 245 // This will get called after Init() is called, either synchronously as part
245 // of the Init() callstack or async after Init() has returned, depending on 246 // of the Init() callstack or async after Init() has returned, depending on
246 // the platform. 247 // the platform.
247 DCHECK_EQ(gfx::kNullAcceleratedWidget, widget_); 248 DCHECK_EQ(gfx::kNullAcceleratedWidget, widget_);
248 widget_ = widget; 249 widget_ = widget;
249 delegate_->OnAcceleratedWidgetAvailable(); 250 delegate_->OnAcceleratedWidgetAvailable();
250 frame_generator_->OnAcceleratedWidgetAvailable(widget); 251 frame_generator_.reset(new FrameGenerator(this, root_window_, widget_));
252 frame_generator_->SetDeviceScaleFactor(init_device_scale_factor_);
251 } 253 }
252 254
253 void PlatformDisplayDefault::OnAcceleratedWidgetDestroyed() { 255 void PlatformDisplayDefault::OnAcceleratedWidgetDestroyed() {
254 NOTREACHED(); 256 NOTREACHED();
255 } 257 }
256 258
257 void PlatformDisplayDefault::OnActivationChanged(bool active) {} 259 void PlatformDisplayDefault::OnActivationChanged(bool active) {}
258 260
259 bool PlatformDisplayDefault::IsInHighContrastMode() { 261 bool PlatformDisplayDefault::IsInHighContrastMode() {
260 return delegate_ ? delegate_->IsInHighContrastMode() : false; 262 return delegate_ ? delegate_->IsInHighContrastMode() : false;
261 } 263 }
262 264
263 } // namespace ws 265 } // namespace ws
264 } // namespace ui 266 } // namespace ui
OLDNEW
« no previous file with comments | « services/ui/ws/platform_display_default.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698