diff options
Diffstat (limited to 'cc/proto')
-rw-r--r-- | cc/proto/BUILD.gn | 1 | ||||
-rw-r--r-- | cc/proto/property_tree.proto | 11 | ||||
-rw-r--r-- | cc/proto/synced_property.proto | 29 | ||||
-rw-r--r-- | cc/proto/synced_property_conversions.cc | 26 | ||||
-rw-r--r-- | cc/proto/synced_property_conversions.h | 26 | ||||
-rw-r--r-- | cc/proto/synced_property_conversions_unittest.cc | 30 |
6 files changed, 122 insertions, 1 deletions
diff --git a/cc/proto/BUILD.gn b/cc/proto/BUILD.gn index f06e869..4387941 100644 --- a/cc/proto/BUILD.gn +++ b/cc/proto/BUILD.gn @@ -58,6 +58,7 @@ proto_library("proto_internal") { "skregion.proto", "skrrect.proto", "skxfermode.proto", + "synced_property.proto", "transform.proto", "vector2d.proto", "vector2df.proto", diff --git a/cc/proto/property_tree.proto b/cc/proto/property_tree.proto index a91824c..d8e8fae 100644 --- a/cc/proto/property_tree.proto +++ b/cc/proto/property_tree.proto @@ -7,6 +7,7 @@ syntax = "proto2"; import "rectf.proto"; import "scroll_offset.proto"; import "size.proto"; +import "synced_property.proto"; import "transform.proto"; import "vector2df.proto"; @@ -156,9 +157,15 @@ message PropertyTree { optional ScrollTreeData scroll_tree_data = 1001; } +message ScrollOffsetMapEntry { + required int64 layer_id = 1; + optional SyncedProperty scroll_offset = 2; +} + // Proto for data members of class ScrollTree message ScrollTreeData { optional int64 currently_scrolling_node_id = 1; + repeated ScrollOffsetMapEntry layer_id_to_scroll_offset_map = 2; } // Proto for data members of class TransformTree. @@ -174,7 +181,7 @@ message TransformTreeData { } // Proto for class PropertyTrees. -// NEXT ID: 13 +// NEXT ID: 14 message PropertyTrees { optional PropertyTree transform_tree = 1; optional PropertyTree effect_tree = 2; @@ -186,6 +193,8 @@ message PropertyTrees { optional bool changed = 11; optional bool full_tree_damaged = 12; optional int64 sequence_number = 6; + optional bool is_main_thread = 13; + optional bool is_active = 14; optional Vector2dF inner_viewport_container_bounds_delta = 8; optional Vector2dF outer_viewport_container_bounds_delta = 9; diff --git a/cc/proto/synced_property.proto b/cc/proto/synced_property.proto new file mode 100644 index 0000000..5b8658f --- /dev/null +++ b/cc/proto/synced_property.proto @@ -0,0 +1,29 @@ +// Copyright 2016 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. + +syntax = "proto2"; + +import "scroll_offset.proto"; + +option optimize_for = LITE_RUNTIME; + +package cc.proto; + +// Since plumbing SyncedScrollOffset is only used by PropertyTree, and can only +// travel from main thread to impl thread one way, the From/To protobuf function +// for SyncedProperty only needs to care the current base, because main thread +// does not have pending/active tree or scroll offset deltas. +message ScrollOffsetGroup { + optional ScrollOffset pending_base = 1; + optional ScrollOffset pending_delta = 2; + optional ScrollOffset active_base = 3; + optional ScrollOffset active_delta = 4; + optional ScrollOffset sent_delta = 5; +} + +message SyncedProperty { + optional bool clobber_active_value = 1; + + optional ScrollOffsetGroup scroll_offset_group = 1001; +} diff --git a/cc/proto/synced_property_conversions.cc b/cc/proto/synced_property_conversions.cc new file mode 100644 index 0000000..09c8be2 --- /dev/null +++ b/cc/proto/synced_property_conversions.cc @@ -0,0 +1,26 @@ +// Copyright 2016 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/proto/synced_property_conversions.h" + +#include "cc/proto/gfx_conversions.h" +#include "cc/proto/synced_property.pb.h" + +namespace cc { + +void SyncedScrollOffsetToProto(const SyncedScrollOffset& synced_scroll_offset, + proto::SyncedProperty* proto) { + proto::ScrollOffsetGroup* data = proto->mutable_scroll_offset_group(); + ScrollOffsetToProto(synced_scroll_offset.PendingBase(), + data->mutable_pending_base()); +} + +void ProtoToSyncedScrollOffset(const proto::SyncedProperty& proto, + SyncedScrollOffset* synced_scroll_offset) { + const proto::ScrollOffsetGroup& data = proto.scroll_offset_group(); + synced_scroll_offset->PushFromMainThread( + ProtoToScrollOffset(data.pending_base())); +} + +} // namespace cc diff --git a/cc/proto/synced_property_conversions.h b/cc/proto/synced_property_conversions.h new file mode 100644 index 0000000..7f3c623 --- /dev/null +++ b/cc/proto/synced_property_conversions.h @@ -0,0 +1,26 @@ +// Copyright 2016 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. + +#ifndef CC_PROTO_SYNCED_PROPERTY_CONVERSIONS_H_ +#define CC_PROTO_SYNCED_PROPERTY_CONVERSIONS_H_ + +#include "cc/base/cc_export.h" +#include "cc/trees/property_tree.h" + +namespace cc { + +namespace proto { +class SyncedProperty; +} // namespace proto + +CC_EXPORT void SyncedScrollOffsetToProto( + const SyncedScrollOffset& synced_scroll_offset, + proto::SyncedProperty* proto); +CC_EXPORT void ProtoToSyncedScrollOffset( + const proto::SyncedProperty& proto, + SyncedScrollOffset* synced_scroll_offset); + +} // namespace cc + +#endif // CC_PROTO_SYNCED_PROPERTY_CONVERSIONS_H_ diff --git a/cc/proto/synced_property_conversions_unittest.cc b/cc/proto/synced_property_conversions_unittest.cc new file mode 100644 index 0000000..bf2a4fd --- /dev/null +++ b/cc/proto/synced_property_conversions_unittest.cc @@ -0,0 +1,30 @@ +// Copyright 2016 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/proto/synced_property_conversions.h" + +#include "cc/proto/synced_property.pb.h" +#include "cc/trees/property_tree.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace cc { +namespace { + +TEST(SyncedPropertyConversionTest, SerializeDeserializeSyncedScrollOffset) { + scoped_refptr<SyncedScrollOffset> synced_scroll_offset = + new SyncedScrollOffset(); + synced_scroll_offset->PushFromMainThread(gfx::ScrollOffset(1, 2)); + proto::SyncedProperty proto; + scoped_refptr<SyncedScrollOffset> serialized_synced_scroll_offset = + new SyncedScrollOffset(); + SyncedScrollOffsetToProto(*synced_scroll_offset.get(), &proto); + ProtoToSyncedScrollOffset(proto, serialized_synced_scroll_offset.get()); + EXPECT_EQ(synced_scroll_offset.get()->PendingBase(), + serialized_synced_scroll_offset.get()->PendingBase()); + EXPECT_EQ(synced_scroll_offset.get()->PendingBase(), + serialized_synced_scroll_offset.get()->PendingBase()); +} + +} // namespace +} // namespace cc |