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

Side by Side Diff: cc/resources/tile_manager.cc

Issue 15995033: cc: Low quality support for low res tiles (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 6 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
« no previous file with comments | « cc/resources/tile_manager.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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 "cc/resources/tile_manager.h" 5 #include "cc/resources/tile_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/json/json_writer.h" 11 #include "base/json/json_writer.h"
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/metrics/histogram.h" 13 #include "base/metrics/histogram.h"
14 #include "cc/debug/devtools_instrumentation.h" 14 #include "cc/debug/devtools_instrumentation.h"
15 #include "cc/debug/traced_value.h" 15 #include "cc/debug/traced_value.h"
16 #include "cc/resources/image_raster_worker_pool.h" 16 #include "cc/resources/image_raster_worker_pool.h"
17 #include "cc/resources/pixel_buffer_raster_worker_pool.h" 17 #include "cc/resources/pixel_buffer_raster_worker_pool.h"
18 #include "cc/resources/tile.h" 18 #include "cc/resources/tile.h"
19 #include "skia/ext/paint_simplifier.h"
19 #include "third_party/skia/include/core/SkCanvas.h" 20 #include "third_party/skia/include/core/SkCanvas.h"
20 #include "ui/gfx/rect_conversions.h" 21 #include "ui/gfx/rect_conversions.h"
21 22
22 namespace cc { 23 namespace cc {
23 24
24 namespace { 25 namespace {
25 26
27 class DisableLCDTextFilter : public SkDrawFilter {
28 public:
29 // SkDrawFilter interface.
30 virtual bool filter(SkPaint* paint, SkDrawFilter::Type type) OVERRIDE {
31 if (type != SkDrawFilter::kText_Type)
32 return true;
33
34 paint->setLCDRenderText(false);
35 return true;
36 }
37 };
38
26 // Determine bin based on three categories of tiles: things we need now, 39 // Determine bin based on three categories of tiles: things we need now,
27 // things we need soon, and eventually. 40 // things we need soon, and eventually.
28 inline TileManagerBin BinFromTilePriority(const TilePriority& prio) { 41 inline TileManagerBin BinFromTilePriority(const TilePriority& prio) {
29 // The amount of time for which we want to have prepainting coverage. 42 // The amount of time for which we want to have prepainting coverage.
30 const float kPrepaintingWindowTimeSeconds = 1.0f; 43 const float kPrepaintingWindowTimeSeconds = 1.0f;
31 const float kBackflingGuardDistancePixels = 314.0f; 44 const float kBackflingGuardDistancePixels = 314.0f;
32 45
33 if (prio.time_to_visible_in_seconds == 0) 46 if (prio.time_to_visible_in_seconds == 0)
34 return NOW_BIN; 47 return NOW_BIN;
35 48
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 } 399 }
387 400
388 void TileManager::AddRequiredTileForActivation(Tile* tile) { 401 void TileManager::AddRequiredTileForActivation(Tile* tile) {
389 DCHECK(std::find(tiles_that_need_to_be_initialized_for_activation_.begin(), 402 DCHECK(std::find(tiles_that_need_to_be_initialized_for_activation_.begin(),
390 tiles_that_need_to_be_initialized_for_activation_.end(), 403 tiles_that_need_to_be_initialized_for_activation_.end(),
391 tile) == 404 tile) ==
392 tiles_that_need_to_be_initialized_for_activation_.end()); 405 tiles_that_need_to_be_initialized_for_activation_.end());
393 tiles_that_need_to_be_initialized_for_activation_.insert(tile); 406 tiles_that_need_to_be_initialized_for_activation_.insert(tile);
394 } 407 }
395 408
409 unsigned TileManager::DetermineRasterFlags(const Tile* tile) const {
410 DCHECK(tile);
411 DCHECK(tile->picture_pile());
412
413 unsigned raster_flags = 0;
414 if (tile->picture_pile()->can_use_lcd_text())
415 raster_flags |= USE_LCD_TEXT;
416
417 if (tile->managed_state().resolution != LOW_RESOLUTION)
418 raster_flags |= USE_HIGH_QUALITY;
419 return raster_flags;
420 }
421
396 void TileManager::AssignGpuMemoryToTiles() { 422 void TileManager::AssignGpuMemoryToTiles() {
397 TRACE_EVENT0("cc", "TileManager::AssignGpuMemoryToTiles"); 423 TRACE_EVENT0("cc", "TileManager::AssignGpuMemoryToTiles");
398 424
399 // Now give memory out to the tiles until we're out, and build 425 // Now give memory out to the tiles until we're out, and build
400 // the needs-to-be-rasterized queue. 426 // the needs-to-be-rasterized queue.
401 tiles_that_need_to_be_rasterized_.clear(); 427 tiles_that_need_to_be_rasterized_.clear();
402 tiles_that_need_to_be_initialized_for_activation_.clear(); 428 tiles_that_need_to_be_initialized_for_activation_.clear();
403 429
404 size_t bytes_releasable = 0; 430 size_t bytes_releasable = 0;
405 for (TileVector::const_iterator it = tiles_.begin(); 431 for (TileVector::const_iterator it = tiles_.begin();
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 FreeResourcesForTile(tile); 465 FreeResourcesForTile(tile);
440 continue; 466 continue;
441 } 467 }
442 468
443 size_t tile_bytes = 0; 469 size_t tile_bytes = 0;
444 470
445 // It costs to maintain a resource. 471 // It costs to maintain a resource.
446 if (tile_version.resource_) 472 if (tile_version.resource_)
447 tile_bytes += tile->bytes_consumed_if_allocated(); 473 tile_bytes += tile->bytes_consumed_if_allocated();
448 474
475 unsigned current_raster_flags = tile_version.raster_flags_;
476 unsigned required_raster_flags = DetermineRasterFlags(tile);
reveman 2013/06/04 16:17:12 What causes required_raster_flags to change and ho
vmpstr 2013/06/04 16:59:08 the quality right now depends on the tile resoluti
reveman 2013/06/04 20:16:08 How come TileRasterFlags is not just part of the T
477
449 // It will cost to allocate a resource. 478 // It will cost to allocate a resource.
450 // Note that this is separate from the above condition, 479 if (mts.raster_task.is_null() &&
451 // so that it's clear why we're adding memory. 480 (!tile_version.resource_ ||
452 if (!tile_version.resource_ && mts.raster_task.is_null()) 481 (current_raster_flags != required_raster_flags))) {
reveman 2013/06/04 16:17:12 what if !mts.raster_task.is_null() but current_ras
vmpstr 2013/06/04 16:59:08 I've added a check in raster task completion.
453 tile_bytes += tile->bytes_consumed_if_allocated(); 482 tile_bytes += tile->bytes_consumed_if_allocated();
483 }
454 484
455 // Tile is OOM. 485 // Tile is OOM.
456 if (tile_bytes > bytes_left) { 486 if (tile_bytes > bytes_left) {
457 tile->tile_version().set_rasterize_on_demand(); 487 tile->tile_version().set_rasterize_on_demand();
458 if (mts.tree_bin[PENDING_TREE] == NOW_BIN) { 488 if (mts.tree_bin[PENDING_TREE] == NOW_BIN) {
459 tiles_requiring_memory_but_oomed.push_back(tile); 489 tiles_requiring_memory_but_oomed.push_back(tile);
460 bytes_oom_in_now_bin_on_pending_tree += tile_bytes; 490 bytes_oom_in_now_bin_on_pending_tree += tile_bytes;
461 } 491 }
462 FreeResourcesForTile(tile); 492 FreeResourcesForTile(tile);
463 higher_priority_tile_oomed = true; 493 higher_priority_tile_oomed = true;
464 continue; 494 continue;
465 } 495 }
466 496
467 tile_version.set_use_resource(); 497 tile_version.set_use_resource();
468 bytes_left -= tile_bytes; 498 bytes_left -= tile_bytes;
469 499
470 // Tile shouldn't be rasterized if we've failed to assign 500 // Tile shouldn't be rasterized if we've failed to assign
471 // gpu memory to a higher priority tile. This is important for 501 // gpu memory to a higher priority tile. This is important for
472 // two reasons: 502 // two reasons:
473 // 1. Tile size should not impact raster priority. 503 // 1. Tile size should not impact raster priority.
474 // 2. Tile with unreleasable memory could otherwise incorrectly 504 // 2. Tile with unreleasable memory could otherwise incorrectly
475 // be added as it's not affected by |bytes_allocatable|. 505 // be added as it's not affected by |bytes_allocatable|.
476 if (higher_priority_tile_oomed) 506 if (higher_priority_tile_oomed)
477 continue; 507 continue;
478 508
479 if (!tile_version.resource_) 509 if (!tile_version.resource_ ||
510 (current_raster_flags != required_raster_flags)) {
480 tiles_that_need_to_be_rasterized_.push_back(tile); 511 tiles_that_need_to_be_rasterized_.push_back(tile);
512 }
481 513
482 if (!tile_version.resource_ && tile->required_for_activation()) 514 if (!tile_version.resource_ && tile->required_for_activation())
483 AddRequiredTileForActivation(tile); 515 AddRequiredTileForActivation(tile);
484 } 516 }
485 517
486 // In OOM situation, we iterate tiles_, remove the memory for active tree 518 // In OOM situation, we iterate tiles_, remove the memory for active tree
487 // and not the now bin. And give them to bytes_oom_in_now_bin_on_pending_tree 519 // and not the now bin. And give them to bytes_oom_in_now_bin_on_pending_tree
488 if (!tiles_requiring_memory_but_oomed.empty()) { 520 if (!tiles_requiring_memory_but_oomed.empty()) {
489 size_t bytes_freed = 0; 521 size_t bytes_freed = 0;
490 for (TileVector::iterator it = tiles_.begin(); it != tiles_.end(); ++it) { 522 for (TileVector::iterator it = tiles_.begin(); it != tiles_.end(); ++it) {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
554 586
555 // Build a new task queue containing all task currently needed. Tasks 587 // Build a new task queue containing all task currently needed. Tasks
556 // are added in order of priority, highest priority task first. 588 // are added in order of priority, highest priority task first.
557 for (TileVector::iterator it = tiles_that_need_to_be_rasterized_.begin(); 589 for (TileVector::iterator it = tiles_that_need_to_be_rasterized_.begin();
558 it != tiles_that_need_to_be_rasterized_.end(); 590 it != tiles_that_need_to_be_rasterized_.end();
559 ++it) { 591 ++it) {
560 Tile* tile = *it; 592 Tile* tile = *it;
561 ManagedTileState& mts = tile->managed_state(); 593 ManagedTileState& mts = tile->managed_state();
562 594
563 DCHECK(tile->tile_version().requires_resource()); 595 DCHECK(tile->tile_version().requires_resource());
564 DCHECK(!tile->tile_version().resource_); 596 DCHECK(!tile->tile_version().resource_ ||
597 (tile->tile_version().raster_flags_ != DetermineRasterFlags(tile)));
565 598
566 // Create raster task for this tile if necessary. 599 // Create raster task for this tile if necessary.
567 if (mts.raster_task.is_null()) 600 if (mts.raster_task.is_null())
568 mts.raster_task = CreateRasterTask(tile); 601 mts.raster_task = CreateRasterTask(tile);
569 602
570 // Finally append raster task. 603 // Finally append raster task.
571 tasks.Append(mts.raster_task); 604 tasks.Append(mts.raster_task);
572 } 605 }
573 606
574 // Schedule running of |tasks|. This replaces any previously 607 // Schedule running of |tasks|. This replaces any previously
(...skipping 28 matching lines...) Expand all
603 TileManager::RasterTaskMetadata TileManager::GetRasterTaskMetadata( 636 TileManager::RasterTaskMetadata TileManager::GetRasterTaskMetadata(
604 const Tile& tile) const { 637 const Tile& tile) const {
605 RasterTaskMetadata metadata; 638 RasterTaskMetadata metadata;
606 const ManagedTileState& mts = tile.managed_state(); 639 const ManagedTileState& mts = tile.managed_state();
607 metadata.is_tile_in_pending_tree_now_bin = 640 metadata.is_tile_in_pending_tree_now_bin =
608 mts.tree_bin[PENDING_TREE] == NOW_BIN; 641 mts.tree_bin[PENDING_TREE] == NOW_BIN;
609 metadata.tile_resolution = mts.resolution; 642 metadata.tile_resolution = mts.resolution;
610 metadata.layer_id = tile.layer_id(); 643 metadata.layer_id = tile.layer_id();
611 metadata.tile_id = &tile; 644 metadata.tile_id = &tile;
612 metadata.source_frame_number = tile.source_frame_number(); 645 metadata.source_frame_number = tile.source_frame_number();
646 metadata.raster_flags = DetermineRasterFlags(&tile);
613 return metadata; 647 return metadata;
614 } 648 }
615 649
616 RasterWorkerPool::RasterTask TileManager::CreateRasterTask(Tile* tile) { 650 RasterWorkerPool::RasterTask TileManager::CreateRasterTask(Tile* tile) {
617 TRACE_EVENT0("cc", "TileManager::CreateRasterTask"); 651 TRACE_EVENT0("cc", "TileManager::CreateRasterTask");
618 652
619 scoped_ptr<ResourcePool::Resource> resource = 653 scoped_ptr<ResourcePool::Resource> resource =
620 resource_pool_->AcquireResource( 654 resource_pool_->AcquireResource(
621 tile->tile_size_.size(), 655 tile->tile_size_.size(),
622 tile->tile_version().resource_format_); 656 tile->tile_version().resource_format_);
(...skipping 25 matching lines...) Expand all
648 continue; 682 continue;
649 } 683 }
650 684
651 // Create and append new image decode task for this pixel ref. 685 // Create and append new image decode task for this pixel ref.
652 RasterWorkerPool::Task decode_task = CreateImageDecodeTask( 686 RasterWorkerPool::Task decode_task = CreateImageDecodeTask(
653 tile, pixel_ref); 687 tile, pixel_ref);
654 decode_tasks.Insert(decode_task); 688 decode_tasks.Insert(decode_task);
655 pending_decode_tasks_[id] = decode_task; 689 pending_decode_tasks_[id] = decode_task;
656 } 690 }
657 691
692 RasterTaskMetadata metadata = GetRasterTaskMetadata(*tile);
658 return RasterWorkerPool::RasterTask( 693 return RasterWorkerPool::RasterTask(
659 tile->picture_pile(), 694 tile->picture_pile(),
660 const_resource, 695 const_resource,
661 base::Bind(&TileManager::RunAnalyzeAndRasterTask, 696 base::Bind(&TileManager::RunAnalyzeAndRasterTask,
662 base::Bind(&TileManager::RunAnalyzeTask, 697 base::Bind(&TileManager::RunAnalyzeTask,
663 analysis, 698 analysis,
664 tile->content_rect(), 699 tile->content_rect(),
665 tile->contents_scale(), 700 tile->contents_scale(),
666 use_color_estimator_, 701 use_color_estimator_,
667 GetRasterTaskMetadata(*tile), 702 metadata,
668 rendering_stats_instrumentation_), 703 rendering_stats_instrumentation_),
669 base::Bind(&TileManager::RunRasterTask, 704 base::Bind(&TileManager::RunRasterTask,
670 analysis, 705 analysis,
671 tile->content_rect(), 706 tile->content_rect(),
672 tile->contents_scale(), 707 tile->contents_scale(),
673 GetRasterTaskMetadata(*tile), 708 metadata,
674 rendering_stats_instrumentation_)), 709 rendering_stats_instrumentation_)),
675 base::Bind(&TileManager::OnRasterTaskCompleted, 710 base::Bind(&TileManager::OnRasterTaskCompleted,
676 base::Unretained(this), 711 base::Unretained(this),
677 make_scoped_refptr(tile), 712 make_scoped_refptr(tile),
678 base::Passed(&resource), 713 base::Passed(&resource),
679 base::Owned(analysis)), 714 base::Owned(analysis),
715 metadata.raster_flags),
680 &decode_tasks); 716 &decode_tasks);
681 } 717 }
682 718
683 void TileManager::OnRasterTaskCompleted( 719 void TileManager::OnRasterTaskCompleted(
684 scoped_refptr<Tile> tile, 720 scoped_refptr<Tile> tile,
685 scoped_ptr<ResourcePool::Resource> resource, 721 scoped_ptr<ResourcePool::Resource> resource,
686 PicturePileImpl::Analysis* analysis, 722 PicturePileImpl::Analysis* analysis,
723 unsigned raster_flags,
687 bool was_canceled) { 724 bool was_canceled) {
688 TRACE_EVENT1("cc", "TileManager::OnRasterTaskCompleted", 725 TRACE_EVENT1("cc", "TileManager::OnRasterTaskCompleted",
689 "was_canceled", was_canceled); 726 "was_canceled", was_canceled);
690 727
691 ManagedTileState& mts = tile->managed_state(); 728 ManagedTileState& mts = tile->managed_state();
692 DCHECK(!mts.raster_task.is_null()); 729 DCHECK(!mts.raster_task.is_null());
693 mts.raster_task.Reset(); 730 mts.raster_task.Reset();
694 731
695 if (was_canceled) { 732 if (was_canceled) {
696 resource_pool_->ReleaseResource(resource.Pass()); 733 resource_pool_->ReleaseResource(resource.Pass());
697 return; 734 return;
698 } 735 }
699 736
737 if (tile->tile_version().resource_) {
738 resource_pool_->ReleaseResource(tile->tile_version().resource_.Pass());
739 DCHECK(tile->tile_version().raster_flags_ != raster_flags);
740 tile->tile_version().raster_flags_ = INVALID_RASTER_FLAG;
741 }
742
700 mts.picture_pile_analysis = *analysis; 743 mts.picture_pile_analysis = *analysis;
701 mts.picture_pile_analyzed = true; 744 mts.picture_pile_analyzed = true;
702 745
703 if (analysis->is_solid_color) { 746 if (analysis->is_solid_color) {
704 tile->tile_version().set_solid_color(analysis->solid_color); 747 tile->tile_version().set_solid_color(analysis->solid_color);
705 resource_pool_->ReleaseResource(resource.Pass()); 748 resource_pool_->ReleaseResource(resource.Pass());
706 } else { 749 } else {
707 tile->tile_version().resource_ = resource.Pass(); 750 tile->tile_version().resource_ = resource.Pass();
751 tile->tile_version().raster_flags_ = raster_flags;
708 } 752 }
709 753
710 DidFinishTileInitialization(tile.get()); 754 DidFinishTileInitialization(tile.get());
711 } 755 }
712 756
713 void TileManager::DidFinishTileInitialization(Tile* tile) { 757 void TileManager::DidFinishTileInitialization(Tile* tile) {
714 if (tile->priority(ACTIVE_TREE).distance_to_visible_in_pixels == 0) 758 if (tile->priority(ACTIVE_TREE).distance_to_visible_in_pixels == 0)
715 did_initialize_visible_tile_ = true; 759 did_initialize_visible_tile_ = true;
716 if (tile->required_for_activation()) { 760 if (tile->required_for_activation()) {
717 // It's possible that a tile required for activation is not in this list 761 // It's possible that a tile required for activation is not in this list
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
783 analysis->is_solid_color &= use_color_estimator; 827 analysis->is_solid_color &= use_color_estimator;
784 } 828 }
785 829
786 scoped_ptr<base::Value> TileManager::RasterTaskMetadata::AsValue() const { 830 scoped_ptr<base::Value> TileManager::RasterTaskMetadata::AsValue() const {
787 scoped_ptr<base::DictionaryValue> res(new base::DictionaryValue()); 831 scoped_ptr<base::DictionaryValue> res(new base::DictionaryValue());
788 res->Set("tile_id", TracedValue::CreateIDRef(tile_id).release()); 832 res->Set("tile_id", TracedValue::CreateIDRef(tile_id).release());
789 res->SetBoolean("is_tile_in_pending_tree_now_bin", 833 res->SetBoolean("is_tile_in_pending_tree_now_bin",
790 is_tile_in_pending_tree_now_bin); 834 is_tile_in_pending_tree_now_bin);
791 res->Set("resolution", TileResolutionAsValue(tile_resolution).release()); 835 res->Set("resolution", TileResolutionAsValue(tile_resolution).release());
792 res->SetInteger("source_frame_number", source_frame_number); 836 res->SetInteger("source_frame_number", source_frame_number);
837 res->SetInteger("raster_flags", raster_flags);
793 return res.PassAs<base::Value>(); 838 return res.PassAs<base::Value>();
794 } 839 }
795 840
796 // static 841 // static
797 bool TileManager::RunRasterTask( 842 bool TileManager::RunRasterTask(
798 PicturePileImpl::Analysis* analysis, 843 PicturePileImpl::Analysis* analysis,
799 gfx::Rect rect, 844 gfx::Rect rect,
800 float contents_scale, 845 float contents_scale,
801 const RasterTaskMetadata& metadata, 846 const RasterTaskMetadata& metadata,
802 RenderingStatsInstrumentation* stats_instrumentation, 847 RenderingStatsInstrumentation* stats_instrumentation,
803 SkDevice* device, 848 SkDevice* device,
804 PicturePileImpl* picture_pile) { 849 PicturePileImpl* picture_pile) {
805 TRACE_EVENT1( 850 TRACE_EVENT1(
806 "cc", "TileManager::RunRasterTask", 851 "cc", "TileManager::RunRasterTask",
807 "metadata", TracedValue::FromValue(metadata.AsValue().release())); 852 "metadata", TracedValue::FromValue(metadata.AsValue().release()));
808 devtools_instrumentation::ScopedLayerTask raster_task( 853 devtools_instrumentation::ScopedLayerTask raster_task(
809 devtools_instrumentation::kRasterTask, metadata.layer_id); 854 devtools_instrumentation::kRasterTask, metadata.layer_id);
810 855
811 DCHECK(picture_pile); 856 DCHECK(picture_pile);
812 DCHECK(analysis); 857 DCHECK(analysis);
813 DCHECK(device); 858 DCHECK(device);
814 859
815 if (analysis->is_solid_color) 860 if (analysis->is_solid_color)
816 return false; 861 return false;
817 862
818 SkCanvas canvas(device); 863 SkCanvas canvas(device);
819 864
865 skia::RefPtr<SkDrawFilter> draw_filter;
866 if ((metadata.raster_flags & USE_HIGH_QUALITY) == 0)
867 draw_filter = skia::AdoptRef(new skia::PaintSimplifier);
868 else if ((metadata.raster_flags & USE_LCD_TEXT) == 0)
869 draw_filter = skia::AdoptRef(new DisableLCDTextFilter);
reveman 2013/06/04 16:17:12 How about low-quality when using lcd text? I don't
vmpstr 2013/06/04 16:59:08 Low quality filter disables lcd text as well. I pr
reveman 2013/06/04 20:16:08 If they can be on/off independently but we don't s
870
871 canvas.setDrawFilter(draw_filter.get());
872
820 if (stats_instrumentation->record_rendering_stats()) { 873 if (stats_instrumentation->record_rendering_stats()) {
821 PicturePileImpl::RasterStats raster_stats; 874 PicturePileImpl::RasterStats raster_stats;
822 picture_pile->RasterToBitmap(&canvas, rect, contents_scale, &raster_stats); 875 picture_pile->RasterToBitmap(&canvas, rect, contents_scale, &raster_stats);
823 stats_instrumentation->AddRaster( 876 stats_instrumentation->AddRaster(
824 raster_stats.total_rasterize_time, 877 raster_stats.total_rasterize_time,
825 raster_stats.best_rasterize_time, 878 raster_stats.best_rasterize_time,
826 raster_stats.total_pixels_rasterized, 879 raster_stats.total_pixels_rasterized,
827 metadata.is_tile_in_pending_tree_now_bin); 880 metadata.is_tile_in_pending_tree_now_bin);
828 881
829 HISTOGRAM_CUSTOM_COUNTS( 882 HISTOGRAM_CUSTOM_COUNTS(
830 "Renderer4.PictureRasterTimeUS", 883 "Renderer4.PictureRasterTimeUS",
831 raster_stats.total_rasterize_time.InMicroseconds(), 884 raster_stats.total_rasterize_time.InMicroseconds(),
832 0, 885 0,
833 100000, 886 100000,
834 100); 887 100);
835 } else { 888 } else {
836 picture_pile->RasterToBitmap(&canvas, rect, contents_scale, NULL); 889 picture_pile->RasterToBitmap(&canvas, rect, contents_scale, NULL);
837 } 890 }
838 891
839 return true; 892 return true;
840 } 893 }
841 894
842 } // namespace cc 895 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/tile_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698