12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/fake_content_layer.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "cc/resources/content_layer_updater.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/prioritized_resource.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/fake_content_layer_impl.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc {
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class FakeContentLayerUpdater : public ContentLayerUpdater {
14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public:
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  using ContentLayerUpdater::paint_rect;
16a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) private:
18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual ~FakeContentLayerUpdater() {}
19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)};
20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)FakeContentLayer::FakeContentLayer(ContentLayerClient* client)
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : ContentLayer(client),
237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      update_count_(0),
24558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      push_properties_count_(0),
254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      output_surface_created_count_(0),
26558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      always_update_resources_(false) {
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetBounds(gfx::Size(1, 1));
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetIsDrawable(true);
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)FakeContentLayer::~FakeContentLayer() {}
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<LayerImpl> FakeContentLayer::CreateLayerImpl(
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    LayerTreeImpl* tree_impl) {
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return FakeContentLayerImpl::Create(tree_impl, layer_id_).PassAs<LayerImpl>();
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochbool FakeContentLayer::Update(ResourceUpdateQueue* queue,
39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                              const OcclusionTracker<Layer>* occlusion) {
407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  bool updated = ContentLayer::Update(queue, occlusion);
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  update_count_++;
42558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  return updated || always_update_resources_;
437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)gfx::Rect FakeContentLayer::LastPaintRect() const {
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return (static_cast<FakeContentLayerUpdater*>(Updater()))->paint_rect();
47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid FakeContentLayer::PushPropertiesTo(LayerImpl* layer) {
507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  ContentLayer::PushPropertiesTo(layer);
517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  push_properties_count_++;
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeContentLayer::OnOutputSurfaceCreated() {
554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ContentLayer::OnOutputSurfaceCreated();
564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  output_surface_created_count_++;
574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool FakeContentLayer::HaveBackingAt(int i, int j) {
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const PrioritizedResource* resource = ResourceAtForTesting(i, j);
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return resource && resource->have_backing_texture();
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace cc
65