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