OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "display_hittest_data.h" | |
rjkroege
2017/06/07 17:16:45
wrong order
gklassen
2017/06/07 20:04:43
Done.
| |
6 #include "base/logging.h" | |
7 #include "components/viz/hittest/hittest_aggregator.h" | |
8 | |
9 namespace viz { | |
10 | |
11 namespace { | |
12 constexpr int kInitialSize = 1024; | |
13 constexpr int kEndOfList = -1; | |
14 } | |
15 | |
16 DisplayHittestData::DisplayHittestData() {} | |
17 DisplayHittestData::~DisplayHittestData() {} | |
18 | |
19 DisplayHittestData* DisplayHittestData::Create() { | |
20 return Create(kInitialSize); | |
21 } | |
22 DisplayHittestData* DisplayHittestData::Create(int size) { | |
rjkroege
2017/06/07 17:16:45
I think that you need to organize this a bit diffe
gklassen
2017/06/07 20:04:43
Acknowledged.
| |
23 int cb = sizeof(DisplayHittestData) + size * sizeof(Element); | |
24 DisplayHittestData* instance = (DisplayHittestData*)::operator new(cb); | |
25 instance->size_ = size; | |
26 return instance; | |
27 } | |
28 | |
29 void DisplayHittestData::Build(const HittestDataMap& map, | |
rjkroege
2017/06/07 17:16:45
this looks like it's missing some functionality?
gklassen
2017/06/07 20:04:43
Done.
| |
30 cc::SurfaceId root_surface_id) { | |
31 Append(map, root_surface_id); | |
32 regions_[count_].child_count_ = kEndOfList; | |
33 } | |
34 | |
35 void DisplayHittestData::Append(const HittestDataMap& map, | |
36 cc::SurfaceId surface_id) { | |
37 auto search = map.find(surface_id); | |
38 if (search == map.end()) { | |
39 // referenced surface not found! | |
40 return; | |
41 } | |
42 hittest::mojom::HittestData* hittest_data = search->second.get(); | |
43 | |
44 int index = count_++; | |
45 | |
46 regions_[index].surface_id_ = hittest_data->surface_id_; | |
47 regions_[index].flags_ = hittest_data->flags_; | |
48 regions_[index].rect_ = hittest_data->rect_; | |
49 regions_[index].transform_ = hittest_data->transform_; | |
50 | |
51 for (auto& region : hittest_data->regions_) { | |
52 Append(map, region); | |
53 if (region->flags_ == hittest::mojom::HittestRegionFlags::HITTEST_SURFACE) { | |
54 Append(map, region->surface_id_); | |
55 } | |
56 } | |
57 | |
58 regions_[index].child_count_ = count_ - index; | |
59 } | |
60 | |
61 void DisplayHittestData::Append( | |
62 const HittestDataMap& map, | |
63 const hittest::mojom::HittestRegionPtr& region) { | |
64 int index = count_++; | |
65 | |
66 regions_[index].surface_id_ = region->surface_id_; | |
67 regions_[index].flags_ = region->flags_; | |
68 regions_[index].rect_ = region->rect_; | |
69 regions_[index].transform_ = region->transform_; | |
70 | |
71 if (region->flags_ == hittest::mojom::HittestRegionFlags::HITTEST_SURFACE) { | |
72 Append(map, region->surface_id_); | |
73 } | |
74 | |
75 regions_[index].child_count_ = count_ - index; | |
76 } | |
77 | |
78 void DisplayHittestData::Swap() { | |
79 front_offset_ = front_offset_ == 0 ? size_ << 2 : 0; | |
rjkroege
2017/06/07 17:16:45
you could probably use division. compiler should b
gklassen
2017/06/07 20:04:43
Done.
| |
80 count_ = 0; | |
81 } | |
82 | |
83 } // namespace viz | |
OLD | NEW |