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"), "cc::LayerTreeHostImpl", this, |
nduca
2013/08/07 22:11:54
cc.debug,cc.debug.quads
piman
2013/08/09 04:18:20
I tried it, but it didn't seem to do the right thi
| |
1261 TracedValue::FromValue(AsValue().release())); | 1281 TracedValue::FromValue(AsValueWithFrame(frame).release())); |
1262 | 1282 |
1263 // Because the contents of the HUD depend on everything else in the frame, the | 1283 // 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 | 1284 // contents of its texture are updated as the last thing before the frame is |
1265 // drawn. | 1285 // drawn. |
1266 if (active_tree_->hud_layer()) | 1286 if (active_tree_->hud_layer()) |
1267 active_tree_->hud_layer()->UpdateHudTexture(resource_provider_.get()); | 1287 active_tree_->hud_layer()->UpdateHudTexture(resource_provider_.get()); |
1268 | 1288 |
1269 if (output_surface_->ForcedDrawToSoftwareDevice()) { | 1289 if (output_surface_->ForcedDrawToSoftwareDevice()) { |
1270 scoped_ptr<SoftwareRenderer> temp_software_renderer = | 1290 scoped_ptr<SoftwareRenderer> temp_software_renderer = |
1271 SoftwareRenderer::Create(this, output_surface_.get(), NULL); | 1291 SoftwareRenderer::Create(this, output_surface_.get(), NULL); |
(...skipping 1151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2423 | 2443 |
2424 base::Time LayerTreeHostImpl::CurrentFrameTime() { | 2444 base::Time LayerTreeHostImpl::CurrentFrameTime() { |
2425 UpdateCurrentFrameTime(¤t_frame_timeticks_, ¤t_frame_time_); | 2445 UpdateCurrentFrameTime(¤t_frame_timeticks_, ¤t_frame_time_); |
2426 return current_frame_time_; | 2446 return current_frame_time_; |
2427 } | 2447 } |
2428 | 2448 |
2429 base::TimeTicks LayerTreeHostImpl::CurrentPhysicalTimeTicks() const { | 2449 base::TimeTicks LayerTreeHostImpl::CurrentPhysicalTimeTicks() const { |
2430 return base::TimeTicks::Now(); | 2450 return base::TimeTicks::Now(); |
2431 } | 2451 } |
2432 | 2452 |
2433 scoped_ptr<base::Value> LayerTreeHostImpl::AsValue() const { | 2453 scoped_ptr<base::Value> LayerTreeHostImpl::AsValueWithFrame( |
2454 FrameData* frame) const { | |
2434 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); | 2455 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); |
2435 if (this->pending_tree_) | 2456 if (this->pending_tree_) |
2436 state->Set("activation_state", ActivationStateAsValue().release()); | 2457 state->Set("activation_state", ActivationStateAsValue().release()); |
2437 state->Set("device_viewport_size", | 2458 state->Set("device_viewport_size", |
2438 MathUtil::AsValue(device_viewport_size_).release()); | 2459 MathUtil::AsValue(device_viewport_size_).release()); |
2439 if (tile_manager_) | 2460 if (tile_manager_) |
2440 state->Set("tiles", tile_manager_->AllTilesAsValue().release()); | 2461 state->Set("tiles", tile_manager_->AllTilesAsValue().release()); |
2441 state->Set("active_tree", active_tree_->AsValue().release()); | 2462 state->Set("active_tree", active_tree_->AsValue().release()); |
2442 if (pending_tree_) | 2463 if (pending_tree_) |
2443 state->Set("pending_tree", pending_tree_->AsValue().release()); | 2464 state->Set("pending_tree", pending_tree_->AsValue().release()); |
2465 if (frame) | |
2466 state->Set("frame", frame->AsValue().release()); | |
2444 return state.PassAs<base::Value>(); | 2467 return state.PassAs<base::Value>(); |
2445 } | 2468 } |
2446 | 2469 |
2447 scoped_ptr<base::Value> LayerTreeHostImpl::ActivationStateAsValue() const { | 2470 scoped_ptr<base::Value> LayerTreeHostImpl::ActivationStateAsValue() const { |
2448 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); | 2471 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); |
2449 state->Set("lthi", TracedValue::CreateIDRef(this).release()); | 2472 state->Set("lthi", TracedValue::CreateIDRef(this).release()); |
2450 if (tile_manager_) | 2473 if (tile_manager_) |
2451 state->Set("tile_manager", tile_manager_->BasicStateAsValue().release()); | 2474 state->Set("tile_manager", tile_manager_->BasicStateAsValue().release()); |
2452 return state.PassAs<base::Value>(); | 2475 return state.PassAs<base::Value>(); |
2453 } | 2476 } |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2495 | 2518 |
2496 ResourceProvider::ResourceId LayerTreeHostImpl::ResourceIdForUIResource( | 2519 ResourceProvider::ResourceId LayerTreeHostImpl::ResourceIdForUIResource( |
2497 UIResourceId uid) const { | 2520 UIResourceId uid) const { |
2498 UIResourceMap::const_iterator iter = ui_resource_map_.find(uid); | 2521 UIResourceMap::const_iterator iter = ui_resource_map_.find(uid); |
2499 if (iter != ui_resource_map_.end()) | 2522 if (iter != ui_resource_map_.end()) |
2500 return iter->second; | 2523 return iter->second; |
2501 return 0; | 2524 return 0; |
2502 } | 2525 } |
2503 | 2526 |
2504 } // namespace cc | 2527 } // namespace cc |
OLD | NEW |