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

Side by Side Diff: ui/compositor/compositor.cc

Issue 138903025: Read compositor VSync information from platform, when possible (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 4b969456 piman@ comments; refactor logic into CompositorVSyncManager Created 6 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 | Annotate | Revision Log
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 "ui/compositor/compositor.h" 5 #include "ui/compositor/compositor.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <deque> 8 #include <deque>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/debug/trace_event.h" 12 #include "base/debug/trace_event.h"
13 #include "base/memory/singleton.h" 13 #include "base/memory/singleton.h"
14 #include "base/message_loop/message_loop.h" 14 #include "base/message_loop/message_loop.h"
15 #include "base/metrics/histogram.h" 15 #include "base/metrics/histogram.h"
16 #include "base/run_loop.h" 16 #include "base/run_loop.h"
17 #include "base/strings/string_util.h" 17 #include "base/strings/string_util.h"
18 #include "base/sys_info.h" 18 #include "base/sys_info.h"
19 #include "base/threading/thread.h" 19 #include "base/threading/thread.h"
20 #include "base/threading/thread_restrictions.h" 20 #include "base/threading/thread_restrictions.h"
21 #include "cc/base/latency_info_swap_promise.h" 21 #include "cc/base/latency_info_swap_promise.h"
22 #include "cc/base/switches.h" 22 #include "cc/base/switches.h"
23 #include "cc/input/input_handler.h" 23 #include "cc/input/input_handler.h"
24 #include "cc/layers/layer.h" 24 #include "cc/layers/layer.h"
25 #include "cc/output/context_provider.h" 25 #include "cc/output/context_provider.h"
26 #include "cc/trees/layer_tree_host.h" 26 #include "cc/trees/layer_tree_host.h"
27 #include "third_party/skia/include/core/SkBitmap.h" 27 #include "third_party/skia/include/core/SkBitmap.h"
28 #include "ui/compositor/compositor_observer.h" 28 #include "ui/compositor/compositor_observer.h"
29 #include "ui/compositor/compositor_switches.h" 29 #include "ui/compositor/compositor_switches.h"
30 #include "ui/compositor/compositor_vsync_manager.h"
30 #include "ui/compositor/dip_util.h" 31 #include "ui/compositor/dip_util.h"
31 #include "ui/compositor/layer.h" 32 #include "ui/compositor/layer.h"
32 #include "ui/gfx/frame_time.h" 33 #include "ui/gfx/frame_time.h"
33 #include "ui/gl/gl_context.h" 34 #include "ui/gl/gl_context.h"
34 #include "ui/gl/gl_switches.h" 35 #include "ui/gl/gl_switches.h"
35 36
36 namespace { 37 namespace {
37 38
38 const double kDefaultRefreshRate = 60.0; 39 const double kDefaultRefreshRate = 60.0;
39 const double kTestRefreshRate = 200.0; 40 const double kTestRefreshRate = 200.0;
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 posted_swaps_->pending_swap_ = NULL; 177 posted_swaps_->pending_swap_ = NULL;
177 } 178 }
178 179
179 } // namespace 180 } // namespace
180 181
181 namespace ui { 182 namespace ui {
182 183
183 Compositor::Compositor(gfx::AcceleratedWidget widget) 184 Compositor::Compositor(gfx::AcceleratedWidget widget)
184 : root_layer_(NULL), 185 : root_layer_(NULL),
185 widget_(widget), 186 widget_(widget),
187 vsync_manager_(new CompositorVSyncManager()),
186 posted_swaps_(new PostedSwapQueue()), 188 posted_swaps_(new PostedSwapQueue()),
187 device_scale_factor_(0.0f), 189 device_scale_factor_(0.0f),
188 last_started_frame_(0), 190 last_started_frame_(0),
189 last_ended_frame_(0), 191 last_ended_frame_(0),
190 next_draw_is_resize_(false), 192 next_draw_is_resize_(false),
191 disable_schedule_composite_(false), 193 disable_schedule_composite_(false),
192 compositor_lock_(NULL), 194 compositor_lock_(NULL),
193 defer_draw_scheduling_(false), 195 defer_draw_scheduling_(false),
194 waiting_on_compositing_end_(false), 196 waiting_on_compositing_end_(false),
195 draw_on_compositing_end_(false), 197 draw_on_compositing_end_(false),
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 if (root_layer_) 412 if (root_layer_)
411 root_layer_->OnDeviceScaleFactorChanged(scale); 413 root_layer_->OnDeviceScaleFactorChanged(scale);
412 } 414 }
413 } 415 }
414 416
415 void Compositor::SetBackgroundColor(SkColor color) { 417 void Compositor::SetBackgroundColor(SkColor color) {
416 host_->set_background_color(color); 418 host_->set_background_color(color);
417 ScheduleDraw(); 419 ScheduleDraw();
418 } 420 }
419 421
422 scoped_refptr<CompositorVSyncManager> Compositor::vsync_manager() const {
423 return vsync_manager_;
424 }
425
420 void Compositor::AddObserver(CompositorObserver* observer) { 426 void Compositor::AddObserver(CompositorObserver* observer) {
421 observer_list_.AddObserver(observer); 427 observer_list_.AddObserver(observer);
422 } 428 }
423 429
424 void Compositor::RemoveObserver(CompositorObserver* observer) { 430 void Compositor::RemoveObserver(CompositorObserver* observer) {
425 observer_list_.RemoveObserver(observer); 431 observer_list_.RemoveObserver(observer);
426 } 432 }
427 433
428 bool Compositor::HasObserver(CompositorObserver* observer) { 434 bool Compositor::HasObserver(CompositorObserver* observer) {
429 return observer_list_.HasObserver(observer); 435 return observer_list_.HasObserver(observer);
430 } 436 }
431 437
432 void Compositor::OnUpdateVSyncParameters(base::TimeTicks timebase,
433 base::TimeDelta interval) {
434 FOR_EACH_OBSERVER(CompositorObserver,
435 observer_list_,
436 OnUpdateVSyncParameters(this, timebase, interval));
437 }
438
439 void Compositor::Layout() { 438 void Compositor::Layout() {
440 // We're sending damage that will be addressed during this composite 439 // We're sending damage that will be addressed during this composite
441 // cycle, so we don't need to schedule another composite to address it. 440 // cycle, so we don't need to schedule another composite to address it.
442 disable_schedule_composite_ = true; 441 disable_schedule_composite_ = true;
443 if (root_layer_) 442 if (root_layer_)
444 root_layer_->SendDamagedRects(); 443 root_layer_->SendDamagedRects();
445 disable_schedule_composite_ = false; 444 disable_schedule_composite_ = false;
446 } 445 }
447 446
448 scoped_ptr<cc::OutputSurface> Compositor::CreateOutputSurface(bool fallback) { 447 scoped_ptr<cc::OutputSurface> Compositor::CreateOutputSurface(bool fallback) {
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
557 // CompositorObservers to be notified before starting another 556 // CompositorObservers to be notified before starting another
558 // draw cycle. 557 // draw cycle.
559 ScheduleDraw(); 558 ScheduleDraw();
560 } 559 }
561 FOR_EACH_OBSERVER(CompositorObserver, 560 FOR_EACH_OBSERVER(CompositorObserver,
562 observer_list_, 561 observer_list_,
563 OnCompositingEnded(this)); 562 OnCompositingEnded(this));
564 } 563 }
565 564
566 } // namespace ui 565 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698