aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/remote_demo.cpp
diff options
context:
space:
mode:
authorGravatar Herb Derby <herb@google.com>2018-04-08 03:56:42 +0000
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-04-08 04:29:01 +0000
commit4473907dee6b34785ac5dafba7561c40977d9786 (patch)
treef472129434ad5678837f02bf9280360f1a6cd6f9 /tools/remote_demo.cpp
parent87fa2b08aa949b85d0ceef1c1535a57a4c5cdeb4 (diff)
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 <herb@google.com> > Reviewed-by: Khushal Sagar <khushalsagar@google.com> 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 <herb@google.com> Commit-Queue: Herb Derby <herb@google.com>
Diffstat (limited to 'tools/remote_demo.cpp')
-rw-r--r--tools/remote_demo.cpp98
1 files changed, 30 insertions, 68 deletions
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<SkData> 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<size_t, IOResult> 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<uint8_t> 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;
}
}