From ffaac6b176fa5170a931b4a9f3b09041926f7a58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Legan=C3=A9s-Combarro=20=27piranna?= Date: Thu, 6 Dec 2018 19:12:43 +0100 Subject: [PATCH 1/5] [Backend] Add async method `waitVSync()` --- src/backend/Backend.cc | 38 ++++++++++++++++++++++++++++++++++++++ src/backend/Backend.h | 9 +++++++++ 2 files changed, 47 insertions(+) diff --git a/src/backend/Backend.cc b/src/backend/Backend.cc index 34ef541f5..319207179 100644 --- a/src/backend/Backend.cc +++ b/src/backend/Backend.cc @@ -1,6 +1,29 @@ #include "Backend.h" +using Nan::AsyncQueueWorker; +using Nan::AsyncWorker; +using Nan::Callback; + + +class WaitVSync: public AsyncWorker +{ + public: + WaitVSync(Callback* callback, Backend* backend) + : AsyncWorker(callback, "Backend:WaitVSync") + , backend(backend) + {} + + void Execute() + { + backend->waitVSync(); + } + + private: + Backend* backend; +}; + + Backend::Backend(string name, int width, int height) : name(name) , width(width) @@ -97,6 +120,21 @@ bool Backend::isSurfaceValid(){ } +NAN_METHOD(Backend::waitVSync) +{ + Backend* backend = Nan::ObjectWrap::Unwrap(info.This()); + + Callback* callback = new Callback(info[0].As()); + + AsyncQueueWorker(new WaitVSync(callback, backend)); +} + +void Backend::Initialize(Local ctor) +{ + Nan::SetPrototypeMethod(ctor, "waitVSync", waitVSync); +} + + BackendOperationNotAvailable::BackendOperationNotAvailable(Backend* backend, string operation_name) : backend(backend) diff --git a/src/backend/Backend.h b/src/backend/Backend.h index 75ae37aad..034318d35 100644 --- a/src/backend/Backend.h +++ b/src/backend/Backend.h @@ -15,13 +15,19 @@ class Canvas; using namespace std; +using namespace v8; + class Backend : public Nan::ObjectWrap { + friend class WaitVSync; + private: const string name; const char* error = NULL; + virtual void waitVSync(){}; + protected: int width; int height; @@ -31,6 +37,7 @@ class Backend : public Nan::ObjectWrap Backend(string name, int width, int height); static void init(const Nan::FunctionCallbackInfo &info); static Backend *construct(int width, int height){ return nullptr; } + static void Initialize(Local ctor); public: virtual ~Backend(); @@ -58,6 +65,8 @@ class Backend : public Nan::ObjectWrap bool isSurfaceValid(); inline const char* getError(){ return error; } + + static NAN_METHOD(waitVSync); }; From b394d31f6743538d5ba5c58cc90d24aee0571fea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Legan=C3=A9s-Combarro=20=27piranna?= Date: Thu, 6 Dec 2018 22:26:47 +0100 Subject: [PATCH 2/5] [Backend] `swapBuffers()` method --- src/backend/Backend.cc | 13 +++++++++++++ src/backend/Backend.h | 6 ++++++ 2 files changed, 19 insertions(+) diff --git a/src/backend/Backend.cc b/src/backend/Backend.cc index 34ef541f5..639015c82 100644 --- a/src/backend/Backend.cc +++ b/src/backend/Backend.cc @@ -97,6 +97,19 @@ bool Backend::isSurfaceValid(){ } +NAN_METHOD(Backend::swapBuffers) +{ + Backend* backend = Nan::ObjectWrap::Unwrap(info.This()); + + backend->swapBuffers(); +} + +void Backend::Initialize(Local ctor) +{ + Nan::SetPrototypeMethod(ctor, "swapBuffers", swapBuffers); +} + + BackendOperationNotAvailable::BackendOperationNotAvailable(Backend* backend, string operation_name) : backend(backend) diff --git a/src/backend/Backend.h b/src/backend/Backend.h index 75ae37aad..4f193b229 100644 --- a/src/backend/Backend.h +++ b/src/backend/Backend.h @@ -15,6 +15,7 @@ class Canvas; using namespace std; +using namespace v8; class Backend : public Nan::ObjectWrap { @@ -22,6 +23,8 @@ class Backend : public Nan::ObjectWrap const string name; const char* error = NULL; + virtual void swapBuffers(){}; + protected: int width; int height; @@ -31,6 +34,7 @@ class Backend : public Nan::ObjectWrap Backend(string name, int width, int height); static void init(const Nan::FunctionCallbackInfo &info); static Backend *construct(int width, int height){ return nullptr; } + static void Initialize(Local ctor); public: virtual ~Backend(); @@ -58,6 +62,8 @@ class Backend : public Nan::ObjectWrap bool isSurfaceValid(); inline const char* getError(){ return error; } + + static NAN_METHOD(swapBuffers); }; From 3978af3ce68a74e88adb643f2990af18e2c121cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Legan=C3=A9s-Combarro=20=27piranna?= Date: Sat, 21 Mar 2020 18:32:45 +0100 Subject: [PATCH 3/5] Moved screen-only `swapBuffers()` method to isolated `ScreenBuffer` class --- binding.gyp | 1 + src/backend/Backend.cc | 13 ------------- src/backend/Backend.h | 5 ----- src/backend/ScreenBackend.cc | 17 +++++++++++++++++ src/backend/ScreenBackend.h | 17 +++++++++++++++++ 5 files changed, 35 insertions(+), 18 deletions(-) create mode 100644 src/backend/ScreenBackend.cc create mode 100644 src/backend/ScreenBackend.h diff --git a/binding.gyp b/binding.gyp index 24b08d5a6..95dc8d9d0 100644 --- a/binding.gyp +++ b/binding.gyp @@ -62,6 +62,7 @@ 'src/backend/Backend.cc', 'src/backend/ImageBackend.cc', 'src/backend/PdfBackend.cc', + 'src/backend/ScreenBackend.cc', 'src/backend/SvgBackend.cc', 'src/bmp/BMPParser.cc', 'src/Backends.cc', diff --git a/src/backend/Backend.cc b/src/backend/Backend.cc index 3c5fc9bec..a78fecd5c 100644 --- a/src/backend/Backend.cc +++ b/src/backend/Backend.cc @@ -95,19 +95,6 @@ bool Backend::isSurfaceValid(){ } -NAN_METHOD(Backend::swapBuffers) -{ - Backend* backend = Nan::ObjectWrap::Unwrap(info.This()); - - backend->swapBuffers(); -} - -void Backend::Initialize(Local ctor) -{ - Nan::SetPrototypeMethod(ctor, "swapBuffers", swapBuffers); -} - - BackendOperationNotAvailable::BackendOperationNotAvailable(Backend* backend, std::string operation_name) : backend(backend) diff --git a/src/backend/Backend.h b/src/backend/Backend.h index fbb90f9f4..c0c4e1928 100644 --- a/src/backend/Backend.h +++ b/src/backend/Backend.h @@ -15,8 +15,6 @@ class Backend : public Nan::ObjectWrap const std::string name; const char* error = NULL; - virtual void swapBuffers(){}; - protected: int width; int height; @@ -26,7 +24,6 @@ class Backend : public Nan::ObjectWrap Backend(std::string name, int width, int height); static void init(const Nan::FunctionCallbackInfo &info); static Backend *construct(int width, int height){ return nullptr; } - static void Initialize(Local ctor); public: virtual ~Backend(); @@ -54,8 +51,6 @@ class Backend : public Nan::ObjectWrap bool isSurfaceValid(); inline const char* getError(){ return error; } - - static NAN_METHOD(swapBuffers); }; diff --git a/src/backend/ScreenBackend.cc b/src/backend/ScreenBackend.cc new file mode 100644 index 000000000..e8392ac30 --- /dev/null +++ b/src/backend/ScreenBackend.cc @@ -0,0 +1,17 @@ +#include "ScreenBackend.h" + + +using namespace v8; + + +NAN_METHOD(ScreenBackend::swapBuffers) +{ + ScreenBackend* backend = Nan::ObjectWrap::Unwrap(info.This()); + + backend->swapBuffers(); +} + +void ScreenBackend::Initialize(Local ctor) +{ + Nan::SetPrototypeMethod(ctor, "swapBuffers", swapBuffers); +} diff --git a/src/backend/ScreenBackend.h b/src/backend/ScreenBackend.h new file mode 100644 index 000000000..e4eeffa39 --- /dev/null +++ b/src/backend/ScreenBackend.h @@ -0,0 +1,17 @@ +#pragma once + +#include "Backend.h" + + +class Canvas; + +class ScreenBackend : public Backend +{ + private: + virtual void swapBuffers(){}; + + static NAN_METHOD(swapBuffers); + + protected: + static void Initialize(v8::Local ctor); +}; From 8e2486124a5c3d32e1ce65ef1ad7e678a926509e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Legan=C3=A9s-Combarro=20=27piranna?= Date: Sat, 21 Mar 2020 19:02:47 +0100 Subject: [PATCH 4/5] Moved screens-only `waitVSync` method to `ScreenBackend` abstract class --- src/backend/Backend.cc | 38 ------------------------------------ src/backend/Backend.h | 7 ------- src/backend/ScreenBackend.cc | 33 ++++++++++++++++++++++++++++++- src/backend/ScreenBackend.h | 9 +++++++-- 4 files changed, 39 insertions(+), 48 deletions(-) diff --git a/src/backend/Backend.cc b/src/backend/Backend.cc index 3e1a0df7f..373e5915b 100644 --- a/src/backend/Backend.cc +++ b/src/backend/Backend.cc @@ -2,29 +2,6 @@ #include -using Nan::AsyncQueueWorker; -using Nan::AsyncWorker; -using Nan::Callback; - - -class WaitVSync: public AsyncWorker -{ - public: - WaitVSync(Callback* callback, Backend* backend) - : AsyncWorker(callback, "Backend:WaitVSync") - , backend(backend) - {} - - void Execute() - { - backend->waitVSync(); - } - - private: - Backend* backend; -}; - - Backend::Backend(std::string name, int width, int height) : name(name) , width(width) @@ -119,21 +96,6 @@ bool Backend::isSurfaceValid(){ } -NAN_METHOD(Backend::waitVSync) -{ - Backend* backend = Nan::ObjectWrap::Unwrap(info.This()); - - Callback* callback = new Callback(info[0].As()); - - AsyncQueueWorker(new WaitVSync(callback, backend)); -} - -void Backend::Initialize(Local ctor) -{ - Nan::SetPrototypeMethod(ctor, "waitVSync", waitVSync); -} - - BackendOperationNotAvailable::BackendOperationNotAvailable(Backend* backend, std::string operation_name) : backend(backend) diff --git a/src/backend/Backend.h b/src/backend/Backend.h index a75bd28b4..c0c4e1928 100644 --- a/src/backend/Backend.h +++ b/src/backend/Backend.h @@ -11,14 +11,10 @@ class Canvas; class Backend : public Nan::ObjectWrap { - friend class WaitVSync; - private: const std::string name; const char* error = NULL; - virtual void waitVSync(){}; - protected: int width; int height; @@ -28,7 +24,6 @@ class Backend : public Nan::ObjectWrap Backend(std::string name, int width, int height); static void init(const Nan::FunctionCallbackInfo &info); static Backend *construct(int width, int height){ return nullptr; } - static void Initialize(Local ctor); public: virtual ~Backend(); @@ -56,8 +51,6 @@ class Backend : public Nan::ObjectWrap bool isSurfaceValid(); inline const char* getError(){ return error; } - - static NAN_METHOD(waitVSync); }; diff --git a/src/backend/ScreenBackend.cc b/src/backend/ScreenBackend.cc index e8392ac30..b1b70f089 100644 --- a/src/backend/ScreenBackend.cc +++ b/src/backend/ScreenBackend.cc @@ -1,7 +1,27 @@ #include "ScreenBackend.h" -using namespace v8; +using Nan::AsyncQueueWorker; +using Nan::AsyncWorker; +using Nan::Callback; + + +class WaitVSync: public AsyncWorker +{ + public: + WaitVSync(Callback* callback, ScreenBackend* backend) + : AsyncWorker(callback, "ScreenBackend:WaitVSync") + , backend(backend) + {} + + void Execute() + { + backend->waitVSync(); + } + + private: + ScreenBackend* backend; +}; NAN_METHOD(ScreenBackend::swapBuffers) @@ -11,7 +31,18 @@ NAN_METHOD(ScreenBackend::swapBuffers) backend->swapBuffers(); } +NAN_METHOD(ScreenBackend::waitVSync) +{ + ScreenBackend* backend = Nan::ObjectWrap::Unwrap(info.This()); + + Callback* callback = new Callback(info[0].As()); + + AsyncQueueWorker(new WaitVSync(callback, backend)); +} + + void ScreenBackend::Initialize(Local ctor) { Nan::SetPrototypeMethod(ctor, "swapBuffers", swapBuffers); + Nan::SetPrototypeMethod(ctor, "waitVSync", waitVSync); } diff --git a/src/backend/ScreenBackend.h b/src/backend/ScreenBackend.h index e4eeffa39..ec37c041a 100644 --- a/src/backend/ScreenBackend.h +++ b/src/backend/ScreenBackend.h @@ -3,15 +3,20 @@ #include "Backend.h" -class Canvas; +using namespace v8; + class ScreenBackend : public Backend { + friend class WaitVSync; + private: virtual void swapBuffers(){}; + virtual void waitVSync(){}; static NAN_METHOD(swapBuffers); + static NAN_METHOD(waitVSync); protected: - static void Initialize(v8::Local ctor); + static void Initialize(Local ctor); }; From 173a8e48bf18ecb0538a9f61a425e510e4c9f581 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Legan=C3=A9s-Combarro=20=27piranna?= Date: Sat, 17 Oct 2020 19:24:29 +0200 Subject: [PATCH 5/5] Update `devDependencies` to fix linting errors --- package.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 78b31f82b..cde80c41f 100644 --- a/package.json +++ b/package.json @@ -53,13 +53,14 @@ "simple-get": "^3.0.3" }, "devDependencies": { - "@types/node": "^10.12.18", + "@types/node": "^14.11.10", "assert-rejects": "^1.0.0", - "dtslint": "^0.5.3", + "dtslint": "^4.0.4", "express": "^4.16.3", "mocha": "^5.2.0", "pixelmatch": "^4.0.2", - "standard": "^12.0.1" + "standard": "^12.0.1", + "typescript": "^4.0.3" }, "engines": { "node": ">=6"