| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef ANDROID_WEBVIEW_TEST_SHELL_SRC_DRAW_FN_ALLOCATOR_H_ |
| #define ANDROID_WEBVIEW_TEST_SHELL_SRC_DRAW_FN_ALLOCATOR_H_ |
| |
| #include "android_webview/public/browser/draw_fn.h" |
| #include "base/containers/flat_map.h" |
| #include "base/memory/raw_ptr.h" |
| #include "base/no_destructor.h" |
| #include "base/synchronization/lock.h" |
| #include "ui/gfx/android/android_surface_control_compat.h" |
| |
| namespace draw_fn { |
| |
| void SetDrawFnUseVulkan(bool use_vulkan); |
| |
| AwDrawFnFunctionTable* GetDrawFnFunctionTable(); |
| |
| struct FunctorData { |
| FunctorData(); |
| FunctorData(int functor, |
| void* data, |
| AwDrawFnFunctorCallbacks* functor_callbacks); |
| ~FunctorData(); |
| FunctorData(FunctorData&&); |
| FunctorData& operator=(FunctorData&&); |
| |
| FunctorData(const FunctorData&) = delete; |
| FunctorData& operator=(const FunctorData&) = delete; |
| |
| int functor = 0; |
| raw_ptr<void> data = nullptr; |
| raw_ptr<AwDrawFnFunctorCallbacks> functor_callbacks = nullptr; |
| bool released_by_functor = false; |
| bool released_by_manager = false; |
| scoped_refptr<gfx::SurfaceControl::Surface> overlay_surface; |
| }; |
| |
| class Allocator { |
| public: |
| static Allocator* Get(); |
| |
| int allocate(void* data, AwDrawFnFunctorCallbacks* functor_callbacks); |
| FunctorData& get(int functor); |
| void MarkReleasedByFunctor(int functor); |
| void MarkReleasedByManager(int functor); |
| |
| private: |
| friend base::NoDestructor<Allocator>; |
| |
| void MaybeReleaseFunctorAlreadyLocked(int functor); |
| |
| Allocator(); |
| ~Allocator(); |
| |
| base::Lock lock_; |
| base::flat_map<int, FunctorData> map_; |
| int next_functor_ = 1; |
| }; |
| |
| } // namespace draw_fn |
| |
| #endif // ANDROID_WEBVIEW_TEST_SHELL_SRC_DRAW_FN_ALLOCATOR_H_ |