blob: 2d38e4cdd7270298c5ad6473e2817e0c094300aa [file] [log] [blame]
// Copyright 2018 The Fuchsia 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 "surface.h"
#include <fcntl.h>
#include <lib/fdio/watcher.h>
#include <unistd.h>
#include <zircon/device/vfs.h>
#include "flutter/fml/unique_fd.h"
namespace flutter {
Surface::Surface(std::string debug_label)
: debug_label_(std::move(debug_label)) {}
Surface::~Surface() = default;
// |shell::Surface|
bool Surface::IsValid() { return valid_; }
// |shell::Surface|
std::unique_ptr<shell::SurfaceFrame> Surface::AcquireFrame(
const SkISize& size) {
return std::make_unique<shell::SurfaceFrame>(
nullptr, [](const shell::SurfaceFrame& surface_frame, SkCanvas* canvas) {
return true;
});
}
// |shell::Surface|
GrContext* Surface::GetContext() { return nullptr; }
static zx_status_t DriverWatcher(int dirfd, int event, const char* fn,
void* cookie) {
if (event == WATCH_EVENT_ADD_FILE && !strcmp(fn, "000")) {
return ZX_ERR_STOP;
}
return ZX_OK;
}
bool Surface::CanConnectToDisplay() {
constexpr char kGpuDriverClass[] = "/dev/class/gpu";
fml::UniqueFD fd(open(kGpuDriverClass, O_DIRECTORY | O_RDONLY));
if (fd.get() < 0) {
FML_DLOG(ERROR) << "Failed to open " << kGpuDriverClass;
return false;
}
zx_status_t status = fdio_watch_directory(
fd.get(), DriverWatcher, zx_deadline_after(ZX_SEC(5)), nullptr);
return status == ZX_ERR_STOP;
}
// |shell::Surface|
SkMatrix Surface::GetRootTransformation() const {
// This backend does not support delegating to the underlying platform to
// query for root surface transformations. Just return identity.
SkMatrix matrix;
matrix.reset();
return matrix;
}
} // namespace flutter