1 // Copyright 2016 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 "third_party/blink/renderer/platform/graphics/compositor_element_id.h" 6 7 namespace blink { 8 NewUniqueObjectId()9UniqueObjectId NewUniqueObjectId() { 10 static UniqueObjectId counter = 0; 11 return ++counter; 12 } 13 CreateCompositorElementId(uint64_t blink_id,CompositorElementIdNamespace namespace_id)14static CompositorElementId CreateCompositorElementId( 15 uint64_t blink_id, 16 CompositorElementIdNamespace namespace_id) { 17 DCHECK(blink_id > 0 && 18 blink_id < std::numeric_limits<uint64_t>::max() / 19 static_cast<unsigned>( 20 CompositorElementIdNamespace::kMaxRepresentable)); 21 // Shift to make room for namespace_id enum bits. 22 cc::ElementIdType id = blink_id << kCompositorNamespaceBitCount; 23 id += static_cast<uint64_t>(namespace_id); 24 return CompositorElementId(id); 25 } 26 CompositorElementIdFromUniqueObjectId(UniqueObjectId id,CompositorElementIdNamespace namespace_id)27CompositorElementId PLATFORM_EXPORT CompositorElementIdFromUniqueObjectId( 28 UniqueObjectId id, 29 CompositorElementIdNamespace namespace_id) { 30 DCHECK_LE(namespace_id, CompositorElementIdNamespace::kMax); 31 return CreateCompositorElementId(id, namespace_id); 32 } 33 34 CompositorElementId PLATFORM_EXPORT CompositorElementIdFromDOMNodeId(DOMNodeId id)35CompositorElementIdFromDOMNodeId(DOMNodeId id) { 36 DCHECK_GE(id, 0); 37 return CreateCompositorElementId( 38 id, CompositorElementIdNamespace::kUniqueObjectId); 39 } 40 41 CompositorElementId PLATFORM_EXPORT CompositorElementIdFromUniqueObjectId(UniqueObjectId id)42CompositorElementIdFromUniqueObjectId(UniqueObjectId id) { 43 return CreateCompositorElementId( 44 id, CompositorElementIdNamespace::kUniqueObjectId); 45 } 46 NamespaceFromCompositorElementId(CompositorElementId element_id)47CompositorElementIdNamespace NamespaceFromCompositorElementId( 48 CompositorElementId element_id) { 49 return static_cast<CompositorElementIdNamespace>( 50 element_id.GetStableId() % 51 static_cast<uint64_t>(CompositorElementIdNamespace::kMaxRepresentable)); 52 } 53 54 } // namespace blink 55