blob: 3a4fc008095f61cb86144c1214c14b6ff019475e [file] [log] [blame]
// 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.
#include "flutter/shell/platform/embedder/tests/embedder_test_context_metal.h"
#include <memory>
#include "embedder.h"
#include "flutter/fml/logging.h"
namespace flutter {
namespace testing {
EmbedderTestContextMetal::EmbedderTestContextMetal(std::string assets_path)
: EmbedderTestContext(assets_path) {
metal_context_ = std::make_unique<TestMetalContext>();
}
EmbedderTestContextMetal::~EmbedderTestContextMetal() {}
void EmbedderTestContextMetal::SetupSurface(SkISize surface_size) {
FML_CHECK(surface_size_.isEmpty());
surface_size_ = surface_size;
}
size_t EmbedderTestContextMetal::GetSurfacePresentCount() const {
return present_count_;
}
EmbedderTestContextType EmbedderTestContextMetal::GetContextType() const {
return EmbedderTestContextType::kMetalContext;
}
void EmbedderTestContextMetal::SetupCompositor() {
FML_CHECK(false) << "Compositor rendering not supported in metal.";
}
TestMetalContext* EmbedderTestContextMetal::GetTestMetalContext() {
return metal_context_.get();
}
bool EmbedderTestContextMetal::Present(int64_t texture_id) {
FireRootSurfacePresentCallbackIfPresent([&]() {
auto metal_surface_ =
TestMetalSurface::Create(*metal_context_, texture_id, surface_size_);
return metal_surface_->GetRasterSurfaceSnapshot();
});
present_count_++;
return metal_context_->Present(texture_id);
}
void EmbedderTestContextMetal::SetExternalTextureCallback(
TestExternalTextureCallback external_texture_frame_callback) {
external_texture_frame_callback_ = external_texture_frame_callback;
}
bool EmbedderTestContextMetal::PopulateExternalTexture(
int64_t texture_id,
size_t w,
size_t h,
FlutterMetalExternalTexture* output) {
if (external_texture_frame_callback_ != nullptr) {
return external_texture_frame_callback_(texture_id, w, h, output);
} else {
return false;
}
}
} // namespace testing
} // namespace flutter