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

Side by Side Diff: ui/accelerated_widget_mac/ca_layer_tree_host.mm

Issue 1917723002: Move logic from ImageTransportSurfaceOverlayMac into ui/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "ui/accelerated_widget_mac/ca_layer_tree_host.h"
6
7 #include "base/trace_event/trace_event.h"
8 #include "ui/base/cocoa/animation_utils.h"
9
10 namespace ui {
11
12 CALayerTreeHost::CALayerTreeHost(bool allow_remote_layers)
13 : allow_remote_layers_(allow_remote_layers) {
14 if (allow_remote_layers_) {
15 root_ca_layer_.reset([[CALayer alloc] init]);
16 [root_ca_layer_ setGeometryFlipped:YES];
17 [root_ca_layer_ setOpaque:YES];
18 }
19 }
20
21 CALayerTreeHost::~CALayerTreeHost() {}
22
23 void CALayerTreeHost::Resize(const gfx::Size& pixel_size, float scale_factor) {
24 pixel_size_ = pixel_size;
25 scale_factor_ = scale_factor;
26 }
27
28 bool CALayerTreeHost::SetPendingBackbuffer(
29 base::ScopedCFTypeRef<IOSurfaceRef> backbuffer) {
30 if (pending_ca_layer_tree_) {
31 DLOG(ERROR) << "Either CALayer overlays or a backbuffer should be "
32 "specified, but not both.";
33 return false;
34 }
35 if (pending_partial_damage_tree_) {
36 DLOG(ERROR) << "Only one backbuffer per swap is allowed.";
37 return false;
38 }
39 pending_partial_damage_tree_.reset(new CALayerPartialDamageTree(
40 allow_remote_layers_, backbuffer, gfx::Rect(pixel_size_)));
41
42 return true;
43 }
44
45 CALayerTree* CALayerTreeHost::GetPendingCALayerTree() {
46 if (pending_partial_damage_tree_) {
47 DLOG(ERROR) << "Either CALayer overlays or a backbuffer should be "
48 "specified, but not both.";
49 }
50 if (!pending_ca_layer_tree_)
51 pending_ca_layer_tree_.reset(new CALayerTree);
52 return pending_ca_layer_tree_.get();
53 }
54
55 void CALayerTreeHost::CommitPendingTreesToCA(
56 const gfx::Rect& pixel_damage_rect) {
57 // Update the CALayer hierarchy.
58 ScopedCAActionDisabler disabler;
59 if (pending_ca_layer_tree_) {
60 pending_ca_layer_tree_->CommitScheduledCALayers(
61 root_ca_layer_.get(), std::move(current_ca_layer_tree_), scale_factor_);
62 current_ca_layer_tree_.swap(pending_ca_layer_tree_);
63 current_partial_damage_tree_.reset();
64 } else if (pending_partial_damage_tree_) {
65 pending_partial_damage_tree_->CommitCALayers(
66 root_ca_layer_.get(), std::move(current_partial_damage_tree_),
67 scale_factor_, pixel_damage_rect);
68 current_partial_damage_tree_.swap(pending_partial_damage_tree_);
69 current_ca_layer_tree_.reset();
70 } else {
71 TRACE_EVENT0("gpu", "Blank frame: No overlays or CALayers");
72 [root_ca_layer_ setSublayers:nil];
73 current_partial_damage_tree_.reset();
74 current_ca_layer_tree_.reset();
75 }
76
77 // Reset all state for the next frame.
78 pending_ca_layer_tree_.reset();
79 pending_partial_damage_tree_.reset();
80 }
81
82 IOSurfaceRef CALayerTreeHost::GetFrontbufferIOSurface() {
83 if (!current_partial_damage_tree_)
84 return nullptr;
85 return current_partial_damage_tree_->RootLayerIOSurface();
86 }
87
88 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698