invalidation_region.cc revision ca12bfac764ba476d6cd062bf1dde12cc64c3f40
1ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// found in the LICENSE file. 4ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 5ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "cc/base/invalidation_region.h" 6ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 7ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/metrics/histogram.h" 8ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 9ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochnamespace { 10ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 11ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochconst int kMaxInvalidationRectCount = 256; 12ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 13ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} // namespace 14ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 15ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochnamespace cc { 16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 17ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochInvalidationRegion::InvalidationRegion() {} 18ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 19ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochInvalidationRegion::~InvalidationRegion() {} 20ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 21ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid InvalidationRegion::Swap(Region* region) { 22ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch UMA_HISTOGRAM_CUSTOM_COUNTS( 23ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "Renderer4.InvalidationRegionApproximateRectCount", 24ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch region_.GetRegionComplexity(), 25ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1, 26ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 5000, 27ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 50); 28ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 29ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch SimplifyIfNeeded(); 30ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch region_.Swap(region); 31ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 32ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 33ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid InvalidationRegion::Clear() { 34ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch region_.Clear(); 35ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 36ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 37ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid InvalidationRegion::Union(gfx::Rect rect) { 38ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // TODO(vmpstr): We should simplify the region after Union() after we get a 39ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // good idea of what kind of regions are typical (from the UMA histogram). 40ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch region_.Union(rect); 41ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 42ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 43ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid InvalidationRegion::SimplifyIfNeeded() { 44ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (region_.GetRegionComplexity() > kMaxInvalidationRectCount) 45ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch region_ = region_.bounds(); 46ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 47ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 48ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} // namespace cc 49