// Copyright 2013 The Flutter 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 FLUTTER_TESTING_TEST_METAL_CONTEXT_H_ #define FLUTTER_TESTING_TEST_METAL_CONTEXT_H_ #include #include #include "third_party/skia/include/gpu/ganesh/GrDirectContext.h" #include "third_party/skia/include/ports/SkCFObject.h" namespace flutter { class TestMetalContext { public: struct TextureInfo { int64_t texture_id; void* texture; }; TestMetalContext(); ~TestMetalContext(); void* GetMetalDevice() const; void* GetMetalCommandQueue() const; sk_sp GetSkiaContext() const; /// Returns texture_id = -1 when texture creation fails. TextureInfo CreateMetalTexture(const SkISize& size); bool Present(int64_t texture_id); TextureInfo GetTextureInfo(int64_t texture_id); private: void* device_; void* command_queue_; sk_sp skia_context_; std::mutex textures_mutex_; int64_t texture_id_ctr_ = 1; // guarded by textures_mutex std::map> textures_; // guarded by textures_mutex }; } // namespace flutter #endif // FLUTTER_TESTING_TEST_METAL_CONTEXT_H_