OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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 "cc/trees/layer_tree_host_impl.h" | 5 #include "cc/trees/layer_tree_host_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 #include "cc/trees/damage_tracker.h" | 62 #include "cc/trees/damage_tracker.h" |
63 #include "cc/trees/layer_tree_host.h" | 63 #include "cc/trees/layer_tree_host.h" |
64 #include "cc/trees/layer_tree_host_common.h" | 64 #include "cc/trees/layer_tree_host_common.h" |
65 #include "cc/trees/layer_tree_impl.h" | 65 #include "cc/trees/layer_tree_impl.h" |
66 #include "cc/trees/occlusion_tracker.h" | 66 #include "cc/trees/occlusion_tracker.h" |
67 #include "cc/trees/single_thread_proxy.h" | 67 #include "cc/trees/single_thread_proxy.h" |
68 #include "cc/trees/tree_synchronizer.h" | 68 #include "cc/trees/tree_synchronizer.h" |
69 #include "gpu/command_buffer/client/gles2_interface.h" | 69 #include "gpu/command_buffer/client/gles2_interface.h" |
70 #include "gpu/GLES2/gl2extchromium.h" | 70 #include "gpu/GLES2/gl2extchromium.h" |
71 #include "ui/gfx/frame_time.h" | 71 #include "ui/gfx/frame_time.h" |
| 72 #include "ui/gfx/geometry/rect_conversions.h" |
72 #include "ui/gfx/size_conversions.h" | 73 #include "ui/gfx/size_conversions.h" |
73 #include "ui/gfx/vector2d_conversions.h" | 74 #include "ui/gfx/vector2d_conversions.h" |
74 | 75 |
75 namespace { | 76 namespace { |
76 | 77 |
77 void DidVisibilityChange(cc::LayerTreeHostImpl* id, bool visible) { | 78 void DidVisibilityChange(cc::LayerTreeHostImpl* id, bool visible) { |
78 if (visible) { | 79 if (visible) { |
79 TRACE_EVENT_ASYNC_BEGIN1("webkit", | 80 TRACE_EVENT_ASYNC_BEGIN1("webkit", |
80 "LayerTreeHostImpl::SetVisible", | 81 "LayerTreeHostImpl::SetVisible", |
81 id, | 82 id, |
(...skipping 1286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1368 } | 1369 } |
1369 | 1370 |
1370 if (needs_commit) | 1371 if (needs_commit) |
1371 client_->SetNeedsCommitOnImplThread(); | 1372 client_->SetNeedsCommitOnImplThread(); |
1372 } | 1373 } |
1373 | 1374 |
1374 void LayerTreeHostImpl::SetExternalDrawConstraints( | 1375 void LayerTreeHostImpl::SetExternalDrawConstraints( |
1375 const gfx::Transform& transform, | 1376 const gfx::Transform& transform, |
1376 const gfx::Rect& viewport, | 1377 const gfx::Rect& viewport, |
1377 const gfx::Rect& clip, | 1378 const gfx::Rect& clip, |
| 1379 const gfx::Rect& viewport_rect_for_tile_priority, |
| 1380 const gfx::Transform& transform_for_tile_priority, |
1378 bool resourceless_software_draw) { | 1381 bool resourceless_software_draw) { |
| 1382 gfx::Rect viewport_rect_for_tile_priority_in_view_space; |
| 1383 if (!resourceless_software_draw) { |
| 1384 gfx::Transform screen_to_view(gfx::Transform::kSkipInitialization); |
| 1385 if (transform_for_tile_priority.GetInverse(&screen_to_view)) { |
| 1386 // Convert from screen space to view space. |
| 1387 viewport_rect_for_tile_priority_in_view_space = |
| 1388 gfx::ToEnclosingRect(MathUtil::ProjectClippedRect( |
| 1389 screen_to_view, viewport_rect_for_tile_priority)); |
| 1390 } |
| 1391 } |
| 1392 |
1379 if (external_transform_ != transform || external_viewport_ != viewport || | 1393 if (external_transform_ != transform || external_viewport_ != viewport || |
1380 resourceless_software_draw_ != resourceless_software_draw) { | 1394 resourceless_software_draw_ != resourceless_software_draw || |
| 1395 viewport_rect_for_tile_priority_ != |
| 1396 viewport_rect_for_tile_priority_in_view_space) { |
1381 active_tree_->set_needs_update_draw_properties(); | 1397 active_tree_->set_needs_update_draw_properties(); |
1382 } | 1398 } |
1383 | 1399 |
1384 external_transform_ = transform; | 1400 external_transform_ = transform; |
1385 external_viewport_ = viewport; | 1401 external_viewport_ = viewport; |
1386 external_clip_ = clip; | 1402 external_clip_ = clip; |
| 1403 viewport_rect_for_tile_priority_ = |
| 1404 viewport_rect_for_tile_priority_in_view_space; |
1387 resourceless_software_draw_ = resourceless_software_draw; | 1405 resourceless_software_draw_ = resourceless_software_draw; |
1388 } | 1406 } |
1389 | 1407 |
1390 void LayerTreeHostImpl::SetNeedsRedrawRect(const gfx::Rect& damage_rect) { | 1408 void LayerTreeHostImpl::SetNeedsRedrawRect(const gfx::Rect& damage_rect) { |
1391 if (damage_rect.IsEmpty()) | 1409 if (damage_rect.IsEmpty()) |
1392 return; | 1410 return; |
1393 NotifySwapPromiseMonitorsOfSetNeedsRedraw(); | 1411 NotifySwapPromiseMonitorsOfSetNeedsRedraw(); |
1394 client_->SetNeedsRedrawRectOnImplThread(damage_rect); | 1412 client_->SetNeedsRedrawRectOnImplThread(damage_rect); |
1395 } | 1413 } |
1396 | 1414 |
(...skipping 795 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2192 | 2210 |
2193 void LayerTreeHostImpl::SetDeviceScaleFactor(float device_scale_factor) { | 2211 void LayerTreeHostImpl::SetDeviceScaleFactor(float device_scale_factor) { |
2194 if (device_scale_factor == device_scale_factor_) | 2212 if (device_scale_factor == device_scale_factor_) |
2195 return; | 2213 return; |
2196 device_scale_factor_ = device_scale_factor; | 2214 device_scale_factor_ = device_scale_factor; |
2197 | 2215 |
2198 UpdateInnerViewportContainerSize(); | 2216 UpdateInnerViewportContainerSize(); |
2199 SetFullRootLayerDamage(); | 2217 SetFullRootLayerDamage(); |
2200 } | 2218 } |
2201 | 2219 |
| 2220 const gfx::Rect LayerTreeHostImpl::ViewportRectForTilePriority() const { |
| 2221 if (viewport_rect_for_tile_priority_.IsEmpty()) |
| 2222 return DeviceViewport(); |
| 2223 |
| 2224 return viewport_rect_for_tile_priority_; |
| 2225 } |
| 2226 |
2202 gfx::Size LayerTreeHostImpl::DrawViewportSize() const { | 2227 gfx::Size LayerTreeHostImpl::DrawViewportSize() const { |
2203 return DeviceViewport().size(); | 2228 return DeviceViewport().size(); |
2204 } | 2229 } |
2205 | 2230 |
2206 gfx::Rect LayerTreeHostImpl::DeviceViewport() const { | 2231 gfx::Rect LayerTreeHostImpl::DeviceViewport() const { |
2207 if (external_viewport_.IsEmpty()) | 2232 if (external_viewport_.IsEmpty()) |
2208 return gfx::Rect(device_viewport_size_); | 2233 return gfx::Rect(device_viewport_size_); |
2209 | 2234 |
2210 return external_viewport_; | 2235 return external_viewport_; |
2211 } | 2236 } |
(...skipping 1094 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3306 } | 3331 } |
3307 | 3332 |
3308 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { | 3333 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { |
3309 std::vector<PictureLayerImpl*>::iterator it = | 3334 std::vector<PictureLayerImpl*>::iterator it = |
3310 std::find(picture_layers_.begin(), picture_layers_.end(), layer); | 3335 std::find(picture_layers_.begin(), picture_layers_.end(), layer); |
3311 DCHECK(it != picture_layers_.end()); | 3336 DCHECK(it != picture_layers_.end()); |
3312 picture_layers_.erase(it); | 3337 picture_layers_.erase(it); |
3313 } | 3338 } |
3314 | 3339 |
3315 } // namespace cc | 3340 } // namespace cc |
OLD | NEW |