// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "cc/base/invalidation_region.h"

#include "base/metrics/histogram.h"

namespace {

const int kMaxInvalidationRectCount = 256;

}  // namespace

namespace cc {

InvalidationRegion::InvalidationRegion() = default;

InvalidationRegion::~InvalidationRegion() = default;

void InvalidationRegion::Swap(Region* region) {
  FinalizePendingRects();
  region_.Swap(region);
}

void InvalidationRegion::Clear() {
  pending_rects_.clear();
  region_.Clear();
}

void InvalidationRegion::Union(const gfx::Rect& rect) {
  if (pending_rects_.size() >= kMaxInvalidationRectCount)
    pending_rects_[0].Union(rect);
  else
    pending_rects_.push_back(rect);
}

void InvalidationRegion::FinalizePendingRects() {
  if (pending_rects_.empty())
    return;

  if (region_.GetRegionComplexity() + pending_rects_.size() >
      kMaxInvalidationRectCount) {
    gfx::Rect pending_bounds = region_.bounds();
    for (auto& rect : pending_rects_)
      pending_bounds.Union(rect);
    region_ = pending_bounds;
  } else {
    for (auto& rect : pending_rects_)
      region_.Union(rect);
  }

  pending_rects_.clear();
}

}  // namespace cc
