Loading libs/hwui/DeferredDisplayList.cpp +7 −2 Original line number Diff line number Diff line Loading @@ -533,7 +533,11 @@ void DeferredDisplayList::addDrawOp(OpenGLRenderer& renderer, DrawOp* op) { if (deferInfo.mergeable) { // Try to merge with any existing batch with same mergeId. if (mMergingBatches[deferInfo.batchId].get(deferInfo.mergeId, targetBatch)) { std::unordered_map<mergeid_t, DrawBatch*>& mergingBatch = mMergingBatches[deferInfo.batchId]; auto getResult = mergingBatch.find(deferInfo.mergeId); if (getResult != mergingBatch.end()) { targetBatch = getResult->second; if (!((MergingDrawBatch*) targetBatch)->canMergeWith(op, state)) { targetBatch = nullptr; } Loading Loading @@ -577,7 +581,8 @@ void DeferredDisplayList::addDrawOp(OpenGLRenderer& renderer, DrawOp* op) { if (deferInfo.mergeable) { targetBatch = new MergingDrawBatch(deferInfo, renderer.getViewportWidth(), renderer.getViewportHeight()); mMergingBatches[deferInfo.batchId].put(deferInfo.mergeId, targetBatch); mMergingBatches[deferInfo.batchId].insert( std::make_pair(deferInfo.mergeId, targetBatch)); } else { targetBatch = new DrawBatch(deferInfo); mBatchLookup[deferInfo.batchId] = targetBatch; Loading libs/hwui/DeferredDisplayList.h +3 −2 Original line number Diff line number Diff line Loading @@ -17,9 +17,10 @@ #ifndef ANDROID_HWUI_DEFERRED_DISPLAY_LIST_H #define ANDROID_HWUI_DEFERRED_DISPLAY_LIST_H #include <unordered_map> #include <utils/Errors.h> #include <utils/LinearAllocator.h> #include <utils/TinyHashMap.h> #include "Matrix.h" #include "OpenGLRenderer.h" Loading Loading @@ -177,7 +178,7 @@ private: * MergingDrawBatch of that id. These ids are unique per draw type and guaranteed to not * collide, which avoids the need to resolve mergeid collisions. */ TinyHashMap<mergeid_t, DrawBatch*> mMergingBatches[kOpBatch_Count]; std::unordered_map<mergeid_t, DrawBatch*> mMergingBatches[kOpBatch_Count]; LinearAllocator mAllocator; }; Loading libs/hwui/utils/TinyHashMap.hdeleted 100644 → 0 +0 −70 Original line number Diff line number Diff line /* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef ANDROID_HWUI_TINYHASHMAP_H #define ANDROID_HWUI_TINYHASHMAP_H #include <utils/BasicHashtable.h> namespace android { namespace uirenderer { /** * A very simple hash map that doesn't allow duplicate keys, overwriting the older entry. */ template <typename TKey, typename TValue> class TinyHashMap { public: typedef key_value_pair_t<TKey, TValue> TEntry; /** * Puts an entry in the hash, removing any existing entry with the same key */ void put(TKey key, TValue value) { hash_t hash = android::hash_type(key); ssize_t index = mTable.find(-1, hash, key); if (index != -1) { mTable.removeAt(index); } TEntry initEntry(key, value); mTable.add(hash, initEntry); } /** * Return true if key is in the map, in which case stores the value in the output ref */ bool get(TKey key, TValue& outValue) { hash_t hash = android::hash_type(key); ssize_t index = mTable.find(-1, hash, key); if (index == -1) { return false; } outValue = mTable.entryAt(index).value; return true; } void clear() { mTable.clear(); } private: BasicHashtable<TKey, TEntry> mTable; }; }; // namespace uirenderer }; // namespace android #endif // ANDROID_HWUI_TINYHASHMAP_H Loading
libs/hwui/DeferredDisplayList.cpp +7 −2 Original line number Diff line number Diff line Loading @@ -533,7 +533,11 @@ void DeferredDisplayList::addDrawOp(OpenGLRenderer& renderer, DrawOp* op) { if (deferInfo.mergeable) { // Try to merge with any existing batch with same mergeId. if (mMergingBatches[deferInfo.batchId].get(deferInfo.mergeId, targetBatch)) { std::unordered_map<mergeid_t, DrawBatch*>& mergingBatch = mMergingBatches[deferInfo.batchId]; auto getResult = mergingBatch.find(deferInfo.mergeId); if (getResult != mergingBatch.end()) { targetBatch = getResult->second; if (!((MergingDrawBatch*) targetBatch)->canMergeWith(op, state)) { targetBatch = nullptr; } Loading Loading @@ -577,7 +581,8 @@ void DeferredDisplayList::addDrawOp(OpenGLRenderer& renderer, DrawOp* op) { if (deferInfo.mergeable) { targetBatch = new MergingDrawBatch(deferInfo, renderer.getViewportWidth(), renderer.getViewportHeight()); mMergingBatches[deferInfo.batchId].put(deferInfo.mergeId, targetBatch); mMergingBatches[deferInfo.batchId].insert( std::make_pair(deferInfo.mergeId, targetBatch)); } else { targetBatch = new DrawBatch(deferInfo); mBatchLookup[deferInfo.batchId] = targetBatch; Loading
libs/hwui/DeferredDisplayList.h +3 −2 Original line number Diff line number Diff line Loading @@ -17,9 +17,10 @@ #ifndef ANDROID_HWUI_DEFERRED_DISPLAY_LIST_H #define ANDROID_HWUI_DEFERRED_DISPLAY_LIST_H #include <unordered_map> #include <utils/Errors.h> #include <utils/LinearAllocator.h> #include <utils/TinyHashMap.h> #include "Matrix.h" #include "OpenGLRenderer.h" Loading Loading @@ -177,7 +178,7 @@ private: * MergingDrawBatch of that id. These ids are unique per draw type and guaranteed to not * collide, which avoids the need to resolve mergeid collisions. */ TinyHashMap<mergeid_t, DrawBatch*> mMergingBatches[kOpBatch_Count]; std::unordered_map<mergeid_t, DrawBatch*> mMergingBatches[kOpBatch_Count]; LinearAllocator mAllocator; }; Loading
libs/hwui/utils/TinyHashMap.hdeleted 100644 → 0 +0 −70 Original line number Diff line number Diff line /* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef ANDROID_HWUI_TINYHASHMAP_H #define ANDROID_HWUI_TINYHASHMAP_H #include <utils/BasicHashtable.h> namespace android { namespace uirenderer { /** * A very simple hash map that doesn't allow duplicate keys, overwriting the older entry. */ template <typename TKey, typename TValue> class TinyHashMap { public: typedef key_value_pair_t<TKey, TValue> TEntry; /** * Puts an entry in the hash, removing any existing entry with the same key */ void put(TKey key, TValue value) { hash_t hash = android::hash_type(key); ssize_t index = mTable.find(-1, hash, key); if (index != -1) { mTable.removeAt(index); } TEntry initEntry(key, value); mTable.add(hash, initEntry); } /** * Return true if key is in the map, in which case stores the value in the output ref */ bool get(TKey key, TValue& outValue) { hash_t hash = android::hash_type(key); ssize_t index = mTable.find(-1, hash, key); if (index == -1) { return false; } outValue = mTable.entryAt(index).value; return true; } void clear() { mTable.clear(); } private: BasicHashtable<TKey, TEntry> mTable; }; }; // namespace uirenderer }; // namespace android #endif // ANDROID_HWUI_TINYHASHMAP_H