OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/tile.h" | 5 #include "cc/tile.h" |
6 | 6 |
7 #include "cc/tile_manager.h" | 7 #include "cc/tile_manager.h" |
| 8 #include "third_party/khronos/GLES2/gl2.h" |
8 | 9 |
9 namespace cc { | 10 namespace cc { |
10 | 11 |
11 Tile::Tile(TileManager* tile_manager, | 12 Tile::Tile(TileManager* tile_manager, |
| 13 PicturePile* picture_pile, |
12 gfx::Size tile_size, | 14 gfx::Size tile_size, |
13 GLenum format, | 15 GLenum format, |
14 gfx::Rect rect_inside_picture, | 16 gfx::Rect rect_inside_picture) |
15 TileQuality quality) | |
16 : tile_manager_(tile_manager), | 17 : tile_manager_(tile_manager), |
| 18 picture_pile_(picture_pile), |
17 tile_size_(tile_size), | 19 tile_size_(tile_size), |
18 format_(format), | 20 format_(format), |
19 rect_inside_picture_(rect_inside_picture), | 21 rect_inside_picture_(rect_inside_picture) { |
20 quality_(quality) { | 22 tile_manager_->RegisterTile(this); |
21 } | 23 } |
22 | 24 |
23 Tile::~Tile() { | 25 Tile::~Tile() { |
24 for (size_t i = 0; i < versions_.size(); i++) | 26 tile_manager_->UnregisterTile(this); |
25 tile_manager_->DidDeleteTileVersion(versions_[i]); | |
26 versions_.clear(); | |
27 } | 27 } |
28 | 28 |
29 void Tile::SetPicturePile(int frame_number, PicturePile* picture_pile) { | 29 void Tile::set_priority(WhichTree tree, const TilePriority& priority) { |
30 DCHECK(GetVersion(frame_number) == NULL); | 30 tile_manager_->WillModifyTilePriority(this, tree, priority); |
31 TileVersion* version = new TileVersion(this, frame_number, picture_pile); | 31 priority_[tree] = priority; |
32 versions_.push_back(version); | |
33 tile_manager_->DidCreateTileVersion(version); | |
34 } | 32 } |
35 | 33 |
36 void Tile::ModifyPriority(int frame_number, const TilePriority& priority) { | 34 size_t Tile::bytes_consumed_if_allocated() const { |
37 TileVersion* version = GetVersion(frame_number); | 35 DCHECK(format_ == GL_RGBA); |
38 DCHECK(version) << | 36 return 4 * tile_size_.width() * tile_size_.height(); |
39 "Tile must have a picture pile before its priority can be modified"; | |
40 tile_manager_->WillModifyTileVersionPriority(version, priority); | |
41 version->ModifyPriority(priority); | |
42 } | |
43 | |
44 ResourceProvider::ResourceId Tile::GetDrawableResourceId(int frame_number) { | |
45 TileVersion* version = GetVersion(frame_number); | |
46 if (!version) | |
47 return 0; | |
48 return version->resource_id(); | |
49 } | |
50 | |
51 void Tile::DeleteVersionOnRequestOfTileManager(int frame_number) { | |
52 for (size_t i = 0; i < versions_.size(); i++) { | |
53 if (versions_[i]->frame_number() == frame_number) { | |
54 versions_.erase(versions_.begin() + frame_number); | |
55 return; | |
56 } | |
57 } | |
58 DCHECK(false) << "Could not find version"; | |
59 } | |
60 | |
61 TileVersion* Tile::GetVersion(int frame_number) { | |
62 for (size_t i = 0; i < versions_.size(); i++) { | |
63 if (versions_[i]->frame_number() == frame_number) | |
64 return versions_[i]; | |
65 } | |
66 return NULL; | |
67 } | 37 } |
68 | 38 |
69 } // namespace cc | 39 } // namespace cc |
OLD | NEW |