tile.cc revision b2df76ea8fec9e32f6f3718986dba0d95315b29c
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/resources/tile.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "cc/debug/traced_value.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/tile_manager.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/khronos/GLES2/gl2.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc {
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Tile::Tile(TileManager* tile_manager,
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)           PicturePileImpl* picture_pile,
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)           gfx::Size tile_size,
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)           gfx::Rect content_rect,
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)           gfx::Rect opaque_rect,
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)           float contents_scale,
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)           int layer_id)
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  : tile_manager_(tile_manager),
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    tile_size_(tile_size),
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    content_rect_(content_rect),
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    contents_scale_(contents_scale),
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    opaque_rect_(opaque_rect),
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    layer_id_(layer_id) {
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  set_picture_pile(picture_pile);
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  tile_manager_->RegisterTile(this);
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Tile::~Tile() {
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  tile_manager_->UnregisterTile(this);
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<base::Value> Tile::AsValue() const {
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::DictionaryValue> res(new base::DictionaryValue());
36b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  TracedValue::MakeDictIntoImplicitSnapshot(res.get(), "cc::Tile", this);
37b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  res->Set("picture_pile",
38b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)           TracedValue::CreateIDRef(picture_pile_.get()).release());
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  res->SetDouble("contents_scale", contents_scale_);
40b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  res->Set("active_priority", priority_[ACTIVE_TREE].AsValue().release());
41b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  res->Set("pending_priority", priority_[PENDING_TREE].AsValue().release());
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  res->Set("managed_state", managed_state_.AsValue().release());
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return res.PassAs<base::Value>();
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void Tile::SetPriority(WhichTree tree, const TilePriority& priority) {
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (priority_[tree] == priority)
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return;
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  tile_manager_->WillModifyTilePriority(this, tree, priority);
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  priority_[tree] = priority;
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace cc
55