| // 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_ |