|  | // 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 <map> | 
|  | #include <mutex> | 
|  |  | 
|  | #include "third_party/skia/include/gpu/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<GrDirectContext> 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<GrDirectContext> skia_context_; | 
|  | std::mutex textures_mutex_; | 
|  | int64_t texture_id_ctr_ = 1;                 // guarded by textures_mutex | 
|  | std::map<int64_t, sk_cfp<void*>> textures_;  // guarded by textures_mutex | 
|  | }; | 
|  |  | 
|  | }  // namespace flutter | 
|  |  | 
|  | #endif  // FLUTTER_TESTING_TEST_METAL_CONTEXT_H_ |