From 4473907dee6b34785ac5dafba7561c40977d9786 Mon Sep 17 00:00:00 2001 From: Herb Derby Date: Sun, 8 Apr 2018 03:56:42 +0000 Subject: Revert "Remove all notion of transport from the API." This reverts commit 4961a938586e3c46cf80f15ecb70a011324bfe59. Reason for revert: Breaks MSVC Original change's description: > Remove all notion of transport from the API. > > There is only a need to pass buffers in and out of the system. > All transport is external to the system. > > Change-Id: I26dfc8e0b4cce9969395c96d5230078e7dca3f3d > Reviewed-on: https://skia-review.googlesource.com/119062 > Commit-Queue: Herb Derby > Reviewed-by: Khushal Sagar TBR=herb@google.com,reed@google.com,khushalsagar@google.com # Not skipping CQ checks because original CL landed > 1 day ago. Change-Id: I62cbac1be4483702ba7464822d93fb9f818f88b7 Reviewed-on: https://skia-review.googlesource.com/119580 Reviewed-by: Herb Derby Commit-Queue: Herb Derby --- tools/remote_demo.cpp | 98 ++++++++++++++++----------------------------------- 1 file changed, 30 insertions(+), 68 deletions(-) (limited to 'tools/remote_demo.cpp') diff --git a/tools/remote_demo.cpp b/tools/remote_demo.cpp index 8fc96cadb8..a5e0a367de 100644 --- a/tools/remote_demo.cpp +++ b/tools/remote_demo.cpp @@ -25,52 +25,35 @@ static bool gUseGpu = true; static bool gPurgeFontCaches = true; static bool gUseProcess = true; -static bool write_SkData(int fd, const SkData& data) { - size_t size = data.size(); - ssize_t bytesWritten = ::write(fd, &size, sizeof(size)); - if (bytesWritten < 0) { - err(1,"Failed write %zu", size); - return false; - } - - bytesWritten = ::write(fd, data.data(), data.size()); - if (bytesWritten < 0) { - err(1,"Failed write %zu", size); - return false; +class ReadWriteTransport : public SkRemoteStrikeTransport { +public: + ReadWriteTransport(int readFd, int writeFd) : fReadFd{readFd}, fWriteFd{writeFd} {} + ~ReadWriteTransport() override { + close(fWriteFd); + close(fReadFd); } - - return true; -} - -static sk_sp read_SkData(int fd) { - - size_t size; - ssize_t readSize = ::read(fd, &size, sizeof(size)); - if (readSize <= 0) { - if (readSize < 0) { - err(1, "Failed read %zu", size); + IOResult write(const void* buffer, size_t size) override { + ssize_t writeSize = ::write(fWriteFd, buffer, size); + if (writeSize < 0) { + err(1,"Failed write %zu", size); + return kFail; } - return nullptr; + return kSuccess; } - auto out = SkData::MakeUninitialized(size); - auto data = (uint8_t*)out->data(); - - size_t totalRead = 0; - while (totalRead < size) { - ssize_t sizeRead; - sizeRead = ::read(fd, &data[totalRead], size - totalRead); - if (sizeRead <= 0) { - if (readSize < 0) { - err(1, "Failed read %zu", size); - } - return nullptr; + std::tuple read(void* buffer, size_t size) override { + ssize_t readSize = ::read(fReadFd, buffer, size); + if (readSize < 0) { + err(1,"Failed read %zu", size); + return {size, kFail}; } - totalRead += sizeRead; + return {readSize, kSuccess}; } - return out; -} +private: + const int fReadFd, + fWriteFd; +}; class Timer { public: @@ -150,17 +133,14 @@ static void final_draw(std::string outFilename, static void gpu(int readFd, int writeFd) { if (gUseGpu) { - auto clientRPC = [readFd, writeFd](const SkData& inBuffer) { - write_SkData(writeFd, inBuffer); - return read_SkData(readFd); - }; + ReadWriteTransport rwTransport{readFd, writeFd}; - auto picData = read_SkData(readFd); + auto picData = rwTransport.readSkData(); if (picData == nullptr) { return; } - SkStrikeClient client{clientRPC}; + SkStrikeClient client{&rwTransport}; SkDeserialProcs procs; client.prepareDeserializeProcs(&procs); @@ -168,20 +148,14 @@ static void gpu(int readFd, int writeFd) { final_draw("test.png", &procs, picData.get(), &client); } - ::close(writeFd); - ::close(readFd); - printf("GPU is exiting\n"); } static int renderer( const std::string& skpName, int readFd, int writeFd) { - SkStrikeServer server{}; - auto closeAll = [readFd, writeFd]() { - ::close(writeFd); - ::close(readFd); - }; + ReadWriteTransport rwTransport{readFd, writeFd}; + SkStrikeServer server{&rwTransport}; auto skpData = SkData::MakeFromFileName(skpName.c_str()); std::cout << "skp stream is " << skpData->size() << " bytes long " << std::endl; @@ -193,28 +167,16 @@ static int renderer( server.prepareSerializeProcs(&procs); stream = pic->serialize(&procs); - if (!write_SkData(writeFd, *stream)) { - closeAll(); + if (rwTransport.writeSkData(*stream) == SkRemoteStrikeTransport::kFail) { return 1; } - std::vector tmpBuffer; - while (true) { - auto inBuffer = read_SkData(readFd); - if (inBuffer == nullptr) { - closeAll(); - return 0; - } + std::cout << "Waiting for scaler context ops." << std::endl; - tmpBuffer.clear(); - server.serve(*inBuffer, &tmpBuffer); - auto outBuffer = SkData::MakeWithoutCopy(tmpBuffer.data(), tmpBuffer.size()); - write_SkData(writeFd, *outBuffer); - } + return server.serve(); } else { stream = skpData; final_draw("test-correct.png", nullptr, stream.get(), nullptr); - closeAll(); return 0; } } -- cgit v1.2.3