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 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/containers/hash_tables.h" |
10 #include "base/json/json_writer.h" | 11 #include "base/json/json_writer.h" |
11 #include "base/metrics/histogram.h" | 12 #include "base/metrics/histogram.h" |
12 #include "base/stl_util.h" | 13 #include "base/stl_util.h" |
13 #include "base/strings/stringprintf.h" | 14 #include "base/strings/stringprintf.h" |
14 #include "cc/animation/scrollbar_animation_controller.h" | 15 #include "cc/animation/scrollbar_animation_controller.h" |
15 #include "cc/animation/timing_function.h" | 16 #include "cc/animation/timing_function.h" |
16 #include "cc/base/math_util.h" | 17 #include "cc/base/math_util.h" |
17 #include "cc/base/util.h" | 18 #include "cc/base/util.h" |
18 #include "cc/debug/debug_rect_history.h" | 19 #include "cc/debug/debug_rect_history.h" |
19 #include "cc/debug/frame_rate_counter.h" | 20 #include "cc/debug/frame_rate_counter.h" |
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
430 render_surface->layer_list(), | 431 render_surface->layer_list(), |
431 render_surface_layer->id(), | 432 render_surface_layer->id(), |
432 render_surface->SurfacePropertyChangedOnlyFromDescendant(), | 433 render_surface->SurfacePropertyChangedOnlyFromDescendant(), |
433 render_surface->content_rect(), | 434 render_surface->content_rect(), |
434 render_surface_layer->mask_layer(), | 435 render_surface_layer->mask_layer(), |
435 render_surface_layer->filters(), | 436 render_surface_layer->filters(), |
436 render_surface_layer->filter().get()); | 437 render_surface_layer->filter().get()); |
437 } | 438 } |
438 } | 439 } |
439 | 440 |
| 441 scoped_ptr<base::Value> LayerTreeHostImpl::FrameData::AsValue() const { |
| 442 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); |
| 443 value->SetBoolean("contains_incomplete_tile", contains_incomplete_tile); |
| 444 value->SetBoolean("has_no_damage", has_no_damage); |
| 445 |
| 446 // Quad data can be quite large, so only dump render passes if we select |
| 447 // cc.debug.quads. |
| 448 bool quads_enabled; |
| 449 TRACE_EVENT_CATEGORY_GROUP_ENABLED( |
| 450 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"), &quads_enabled); |
| 451 if (quads_enabled) { |
| 452 scoped_ptr<base::ListValue> render_pass_list(new base::ListValue()); |
| 453 for (size_t i = 0; i < render_passes.size(); ++i) |
| 454 render_pass_list->Append(render_passes[i]->AsValue().release()); |
| 455 value->Set("render_passes", render_pass_list.release()); |
| 456 } |
| 457 return value.PassAs<base::Value>(); |
| 458 } |
| 459 |
440 void LayerTreeHostImpl::FrameData::AppendRenderPass( | 460 void LayerTreeHostImpl::FrameData::AppendRenderPass( |
441 scoped_ptr<RenderPass> render_pass) { | 461 scoped_ptr<RenderPass> render_pass) { |
442 render_passes_by_id[render_pass->id] = render_pass.get(); | 462 render_passes_by_id[render_pass->id] = render_pass.get(); |
443 render_passes.push_back(render_pass.Pass()); | 463 render_passes.push_back(render_pass.Pass()); |
444 } | 464 } |
445 | 465 |
446 static DrawMode GetDrawMode(OutputSurface* output_surface) { | 466 static DrawMode GetDrawMode(OutputSurface* output_surface) { |
447 if (output_surface->ForcedDrawToSoftwareDevice()) { | 467 if (output_surface->ForcedDrawToSoftwareDevice()) { |
448 return DRAW_MODE_RESOURCELESS_SOFTWARE; | 468 return DRAW_MODE_RESOURCELESS_SOFTWARE; |
449 } else if (output_surface->context3d()) { | 469 } else if (output_surface->context3d()) { |
(...skipping 800 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1250 LayerTreeHostCommon::CallFunctionForSubtree( | 1270 LayerTreeHostCommon::CallFunctionForSubtree( |
1251 pending_tree_->root_layer(), | 1271 pending_tree_->root_layer(), |
1252 base::Bind(&LayerTreeHostImplDidBeginTracingCallback)); | 1272 base::Bind(&LayerTreeHostImplDidBeginTracingCallback)); |
1253 } | 1273 } |
1254 LayerTreeHostCommon::CallFunctionForSubtree( | 1274 LayerTreeHostCommon::CallFunctionForSubtree( |
1255 active_tree_->root_layer(), | 1275 active_tree_->root_layer(), |
1256 base::Bind(&LayerTreeHostImplDidBeginTracingCallback)); | 1276 base::Bind(&LayerTreeHostImplDidBeginTracingCallback)); |
1257 } | 1277 } |
1258 | 1278 |
1259 TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID( | 1279 TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID( |
1260 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerTreeHostImpl", this, | 1280 TRACE_DISABLED_BY_DEFAULT("cc.debug") "," |
1261 TracedValue::FromValue(AsValue().release())); | 1281 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"), "cc::LayerTreeHostImpl", |
| 1282 this, TracedValue::FromValue(AsValueWithFrame(frame).release())); |
1262 | 1283 |
1263 // Because the contents of the HUD depend on everything else in the frame, the | 1284 // Because the contents of the HUD depend on everything else in the frame, the |
1264 // contents of its texture are updated as the last thing before the frame is | 1285 // contents of its texture are updated as the last thing before the frame is |
1265 // drawn. | 1286 // drawn. |
1266 if (active_tree_->hud_layer()) | 1287 if (active_tree_->hud_layer()) |
1267 active_tree_->hud_layer()->UpdateHudTexture(resource_provider_.get()); | 1288 active_tree_->hud_layer()->UpdateHudTexture(resource_provider_.get()); |
1268 | 1289 |
1269 if (output_surface_->ForcedDrawToSoftwareDevice()) { | 1290 if (output_surface_->ForcedDrawToSoftwareDevice()) { |
1270 scoped_ptr<SoftwareRenderer> temp_software_renderer = | 1291 scoped_ptr<SoftwareRenderer> temp_software_renderer = |
1271 SoftwareRenderer::Create(this, output_surface_.get(), NULL); | 1292 SoftwareRenderer::Create(this, output_surface_.get(), NULL); |
(...skipping 1151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2423 | 2444 |
2424 base::Time LayerTreeHostImpl::CurrentFrameTime() { | 2445 base::Time LayerTreeHostImpl::CurrentFrameTime() { |
2425 UpdateCurrentFrameTime(¤t_frame_timeticks_, ¤t_frame_time_); | 2446 UpdateCurrentFrameTime(¤t_frame_timeticks_, ¤t_frame_time_); |
2426 return current_frame_time_; | 2447 return current_frame_time_; |
2427 } | 2448 } |
2428 | 2449 |
2429 base::TimeTicks LayerTreeHostImpl::CurrentPhysicalTimeTicks() const { | 2450 base::TimeTicks LayerTreeHostImpl::CurrentPhysicalTimeTicks() const { |
2430 return base::TimeTicks::Now(); | 2451 return base::TimeTicks::Now(); |
2431 } | 2452 } |
2432 | 2453 |
2433 scoped_ptr<base::Value> LayerTreeHostImpl::AsValue() const { | 2454 scoped_ptr<base::Value> LayerTreeHostImpl::AsValueWithFrame( |
| 2455 FrameData* frame) const { |
2434 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); | 2456 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); |
2435 if (this->pending_tree_) | 2457 if (this->pending_tree_) |
2436 state->Set("activation_state", ActivationStateAsValue().release()); | 2458 state->Set("activation_state", ActivationStateAsValue().release()); |
2437 state->Set("device_viewport_size", | 2459 state->Set("device_viewport_size", |
2438 MathUtil::AsValue(device_viewport_size_).release()); | 2460 MathUtil::AsValue(device_viewport_size_).release()); |
2439 if (tile_manager_) | 2461 if (tile_manager_) |
2440 state->Set("tiles", tile_manager_->AllTilesAsValue().release()); | 2462 state->Set("tiles", tile_manager_->AllTilesAsValue().release()); |
2441 state->Set("active_tree", active_tree_->AsValue().release()); | 2463 state->Set("active_tree", active_tree_->AsValue().release()); |
2442 if (pending_tree_) | 2464 if (pending_tree_) |
2443 state->Set("pending_tree", pending_tree_->AsValue().release()); | 2465 state->Set("pending_tree", pending_tree_->AsValue().release()); |
| 2466 if (frame) |
| 2467 state->Set("frame", frame->AsValue().release()); |
2444 return state.PassAs<base::Value>(); | 2468 return state.PassAs<base::Value>(); |
2445 } | 2469 } |
2446 | 2470 |
2447 scoped_ptr<base::Value> LayerTreeHostImpl::ActivationStateAsValue() const { | 2471 scoped_ptr<base::Value> LayerTreeHostImpl::ActivationStateAsValue() const { |
2448 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); | 2472 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); |
2449 state->Set("lthi", TracedValue::CreateIDRef(this).release()); | 2473 state->Set("lthi", TracedValue::CreateIDRef(this).release()); |
2450 if (tile_manager_) | 2474 if (tile_manager_) |
2451 state->Set("tile_manager", tile_manager_->BasicStateAsValue().release()); | 2475 state->Set("tile_manager", tile_manager_->BasicStateAsValue().release()); |
2452 return state.PassAs<base::Value>(); | 2476 return state.PassAs<base::Value>(); |
2453 } | 2477 } |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2495 | 2519 |
2496 ResourceProvider::ResourceId LayerTreeHostImpl::ResourceIdForUIResource( | 2520 ResourceProvider::ResourceId LayerTreeHostImpl::ResourceIdForUIResource( |
2497 UIResourceId uid) const { | 2521 UIResourceId uid) const { |
2498 UIResourceMap::const_iterator iter = ui_resource_map_.find(uid); | 2522 UIResourceMap::const_iterator iter = ui_resource_map_.find(uid); |
2499 if (iter != ui_resource_map_.end()) | 2523 if (iter != ui_resource_map_.end()) |
2500 return iter->second; | 2524 return iter->second; |
2501 return 0; | 2525 return 0; |
2502 } | 2526 } |
2503 | 2527 |
2504 } // namespace cc | 2528 } // namespace cc |
OLD | NEW |