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

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

Issue 1513053002: WIP - Gutterless resize on Windows Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: feedback Created 5 years 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 (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"
(...skipping 23 matching lines...) Expand all
34 #include "ui/gl/gl_switches.h" 34 #include "ui/gl/gl_switches.h"
35 35
36 namespace { 36 namespace {
37 37
38 const double kDefaultRefreshRate = 60.0; 38 const double kDefaultRefreshRate = 60.0;
39 const double kTestRefreshRate = 200.0; 39 const double kTestRefreshRate = 200.0;
40 40
41 } // namespace 41 } // namespace
42 42
43 namespace ui { 43 namespace ui {
44 // ResizeSwapPromise is used to track the progression of a frame of a given size
45 // through commit/draw/post. Once complete, this class updates Compositor's
46 // pending swapped frame size.
47 class Compositor::ResizeSwapPromise : public cc::SwapPromise {
48 public:
49 ResizeSwapPromise(Compositor* compositor, const gfx::Size& pending_size)
50 : compositor_(compositor), pending_size_(pending_size) {}
51 ~ResizeSwapPromise() override {}
52
53 // cc::SwapPromise implementation:
54 void DidActivate() override {}
55 void DidNotSwap(DidNotSwapReason reason) override {}
56 void DidSwap(cc::CompositorFrameMetadata* metadata) override {
57 // This will come in on the impl thread - schedule the update on the main
58 // thread.
piman 2015/12/15 07:15:36 We have only one thread on the browser side now, s
59 compositor_->task_runner_->PostTask(
60 FROM_HERE,
61 base::Bind(&Compositor::set_pending_swapped_frame_size,
62 compositor_->weak_ptr_factory_.GetWeakPtr(), pending_size_));
63 }
64 virtual int64 TraceId() const { return 0; }
65
66 private:
67 Compositor* compositor_;
68 gfx::Size pending_size_;
69 };
44 70
45 CompositorLock::CompositorLock(Compositor* compositor) 71 CompositorLock::CompositorLock(Compositor* compositor)
46 : compositor_(compositor) { 72 : compositor_(compositor) {
47 if (compositor_->locks_will_time_out_) { 73 if (compositor_->locks_will_time_out_) {
48 compositor_->task_runner_->PostDelayedTask( 74 compositor_->task_runner_->PostDelayedTask(
49 FROM_HERE, 75 FROM_HERE,
50 base::Bind(&CompositorLock::CancelLock, AsWeakPtr()), 76 base::Bind(&CompositorLock::CancelLock, AsWeakPtr()),
51 base::TimeDelta::FromMilliseconds(kCompositorLockTimeoutMs)); 77 base::TimeDelta::FromMilliseconds(kCompositorLockTimeoutMs));
52 } 78 }
53 } 79 }
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 host_->QueueSwapPromise(swap_promise.Pass()); 300 host_->QueueSwapPromise(swap_promise.Pass());
275 } 301 }
276 302
277 void Compositor::SetScaleAndSize(float scale, const gfx::Size& size_in_pixel) { 303 void Compositor::SetScaleAndSize(float scale, const gfx::Size& size_in_pixel) {
278 DCHECK_GT(scale, 0); 304 DCHECK_GT(scale, 0);
279 if (!size_in_pixel.IsEmpty()) { 305 if (!size_in_pixel.IsEmpty()) {
280 size_ = size_in_pixel; 306 size_ = size_in_pixel;
281 host_->SetViewportSize(size_in_pixel); 307 host_->SetViewportSize(size_in_pixel);
282 root_web_layer_->SetBounds(size_in_pixel); 308 root_web_layer_->SetBounds(size_in_pixel);
283 context_factory_->ResizeDisplay(this, size_in_pixel); 309 context_factory_->ResizeDisplay(this, size_in_pixel);
310
311 scoped_ptr<ResizeSwapPromise> resize_swap_promise(
312 new ResizeSwapPromise(this, size_in_pixel));
313 host_->QueueSwapPromise(resize_swap_promise.Pass());
284 } 314 }
285 if (device_scale_factor_ != scale) { 315 if (device_scale_factor_ != scale) {
286 device_scale_factor_ = scale; 316 device_scale_factor_ = scale;
287 host_->SetDeviceScaleFactor(scale); 317 host_->SetDeviceScaleFactor(scale);
288 if (root_layer_) 318 if (root_layer_)
289 root_layer_->OnDeviceScaleFactorChanged(scale); 319 root_layer_->OnDeviceScaleFactorChanged(scale);
290 } 320 }
291 } 321 }
292 322
293 void Compositor::SetBackgroundColor(SkColor color) { 323 void Compositor::SetBackgroundColor(SkColor color) {
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 469
440 void Compositor::DidCompleteSwapBuffers() { 470 void Compositor::DidCompleteSwapBuffers() {
441 FOR_EACH_OBSERVER(CompositorObserver, observer_list_, 471 FOR_EACH_OBSERVER(CompositorObserver, observer_list_,
442 OnCompositingEnded(this)); 472 OnCompositingEnded(this));
443 } 473 }
444 474
445 void Compositor::DidPostSwapBuffers() { 475 void Compositor::DidPostSwapBuffers() {
446 base::TimeTicks start_time = base::TimeTicks::Now(); 476 base::TimeTicks start_time = base::TimeTicks::Now();
447 FOR_EACH_OBSERVER(CompositorObserver, observer_list_, 477 FOR_EACH_OBSERVER(CompositorObserver, observer_list_,
448 OnCompositingStarted(this, start_time)); 478 OnCompositingStarted(this, start_time));
479
480 // Enqueue the last_swapped update on our task runner. to ensure ordering with
481 // relation to the ResizeSwapPromise's call to set_pending_swapped_size.
482 task_runner_->PostTask(
483 FROM_HERE, base::Bind(&Compositor::UpdateLastSwappedFrameSize,
484 weak_ptr_factory_.GetWeakPtr()));
piman 2015/12/15 07:15:35 You don't need to post the task any more (see abov
449 } 485 }
450 486
451 void Compositor::DidAbortSwapBuffers() { 487 void Compositor::DidAbortSwapBuffers() {
452 FOR_EACH_OBSERVER(CompositorObserver, 488 FOR_EACH_OBSERVER(CompositorObserver,
453 observer_list_, 489 observer_list_,
454 OnCompositingAborted(this)); 490 OnCompositingAborted(this));
455 } 491 }
456 492
457 void Compositor::SendBeginFramesToChildren(const cc::BeginFrameArgs& args) { 493 void Compositor::SendBeginFramesToChildren(const cc::BeginFrameArgs& args) {
458 FOR_EACH_OBSERVER(CompositorBeginFrameObserver, begin_frame_observer_list_, 494 FOR_EACH_OBSERVER(CompositorBeginFrameObserver, begin_frame_observer_list_,
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 observer_list_, 540 observer_list_,
505 OnCompositingLockStateChanged(this)); 541 OnCompositingLockStateChanged(this));
506 } 542 }
507 543
508 void Compositor::CancelCompositorLock() { 544 void Compositor::CancelCompositorLock() {
509 if (compositor_lock_) 545 if (compositor_lock_)
510 compositor_lock_->CancelLock(); 546 compositor_lock_->CancelLock();
511 } 547 }
512 548
513 } // namespace ui 549 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698