diff options
author | r.kuznetsov <r.kuznetsov@corp.mail.ru> | 2016-02-11 18:54:04 +0300 |
---|---|---|
committer | Sergey Yershov <yershov@corp.mail.ru> | 2016-03-23 16:20:45 +0300 |
commit | bc514eaa3210a5dd22707cfdf0eaa89774cb6790 (patch) | |
tree | 707591cb65ce836386bcb85f7e0714a07b795f1e /drape/overlay_tree.hpp | |
parent | 4cc076b54c1939118d4ba37df69a45df1fd71d42 (diff) |
Overlay tree optimization
Diffstat (limited to 'drape/overlay_tree.hpp')
-rw-r--r-- | drape/overlay_tree.hpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/drape/overlay_tree.hpp b/drape/overlay_tree.hpp index d56ef3b43f..878bd1938b 100644 --- a/drape/overlay_tree.hpp +++ b/drape/overlay_tree.hpp @@ -9,6 +9,7 @@ #include "std/array.hpp" #include "std/vector.hpp" +#include "std/unordered_map.hpp" namespace dp { @@ -39,12 +40,12 @@ class OverlayTree : public m4::Tree<ref_ptr<OverlayHandle>, detail::OverlayTrait public: OverlayTree(); - bool Frame(bool is3d); + bool Frame(); bool IsNeedUpdate() const; - void ForceUpdate(); void StartOverlayPlacing(ScreenBase const & screen); void Add(ref_ptr<OverlayHandle> handle); + void Remove(ref_ptr<OverlayHandle> handle); void EndOverlayPlacing(); void Select(m2::RectD const & rect, TOverlayContainer & result) const; @@ -72,11 +73,16 @@ private: ref_ptr<OverlayHandle> const & parentOverlay); bool CheckHandle(ref_ptr<OverlayHandle> handle, int currentRank, ref_ptr<OverlayHandle> & parentOverlay) const; - void AddHandleToDelete(ref_ptr<OverlayHandle> const & handle); + void DeleteHandle(ref_ptr<OverlayHandle> const & handle); + + uint64_t GetHandleKey(ref_ptr<OverlayHandle> const & handle) const; int m_frameCounter; array<vector<ref_ptr<OverlayHandle>>, dp::OverlayRanksCount> m_handles; vector<ref_ptr<OverlayHandle>> m_handlesToDelete; + + unordered_map<uint64_t, ref_ptr<OverlayHandle>> m_handlesCache; + bool m_followingMode; #ifdef COLLECT_DISPLACEMENT_INFO |