diff options
author | Brian Osman <brianosman@google.com> | 2017-11-22 13:23:35 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-11-22 18:59:44 +0000 |
commit | 4f99e58252175f01c0b9ca1a5e2fc7acec6acec3 (patch) | |
tree | 64458810ed2962bbdcb470a4f199feade2be2b03 /src/views/SkEvent.cpp | |
parent | d923a71a113d97dc87b4424c25d5b5019331db24 (diff) |
Remove a huge pile of views code
All of this is dead when not using the old SkWindow framework.
TBR=reed@google.com
Bug: skia:
Change-Id: I0f6ab18987a98469bfd367d5bc10967300dfd3ca
Reviewed-on: https://skia-review.googlesource.com/75384
Reviewed-by: Brian Osman <brianosman@google.com>
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Diffstat (limited to 'src/views/SkEvent.cpp')
-rw-r--r-- | src/views/SkEvent.cpp | 280 |
1 files changed, 6 insertions, 274 deletions
diff --git a/src/views/SkEvent.cpp b/src/views/SkEvent.cpp index c218ee419d..8102455979 100644 --- a/src/views/SkEvent.cpp +++ b/src/views/SkEvent.cpp @@ -9,13 +9,10 @@ #include "SkDOM.h" #include "SkEvent.h" -void SkEvent::initialize(const char* type, size_t typeLen, - SkEventSinkID targetID) { +void SkEvent::initialize(const char* type, size_t typeLen) { fType = nullptr; setType(type, typeLen); f32 = 0; - fTargetID = targetID; - fTargetProc = nullptr; #ifdef SK_DEBUG fTime = 0; fNextEvent = nullptr; @@ -24,7 +21,7 @@ void SkEvent::initialize(const char* type, size_t typeLen, SkEvent::SkEvent() { - initialize("", 0, 0); + initialize("", 0); } SkEvent::SkEvent(const SkEvent& src) @@ -34,15 +31,15 @@ SkEvent::SkEvent(const SkEvent& src) setType(src.fType); } -SkEvent::SkEvent(const SkString& type, SkEventSinkID targetID) +SkEvent::SkEvent(const SkString& type) { - initialize(type.c_str(), type.size(), targetID); + initialize(type.c_str(), type.size()); } -SkEvent::SkEvent(const char type[], SkEventSinkID targetID) +SkEvent::SkEvent(const char type[]) { SkASSERT(type); - initialize(type, strlen(type), targetID); + initialize(type, strlen(type)); } SkEvent::~SkEvent() @@ -245,268 +242,3 @@ void SkEvent::inflate(const SkDOM& dom, const SkDOM::Node* node) SkDebugf("\n"); } #endif - -/////////////////////////////////////////////////////////////////////////////////////// - -#ifdef SK_DEBUG -// #define SK_TRACE_EVENTSx -#endif - -#ifdef SK_TRACE_EVENTS - static void event_log(const char s[]) - { - SkDEBUGF(("%s\n", s)); - } - - #define EVENT_LOG(s) event_log(s) - #define EVENT_LOGN(s, n) do { SkString str(s); str.append(" "); str.appendS32(n); event_log(str.c_str()); } while (0) -#else - #define EVENT_LOG(s) - #define EVENT_LOGN(s, n) -#endif - -#include "SkMutex.h" -#include "SkTime.h" - -class SkEvent_Globals { -public: - SkEvent_Globals() { - fEventQHead = nullptr; - fEventQTail = nullptr; - fDelayQHead = nullptr; - SkDEBUGCODE(fEventCounter = 0;) - } - - SkMutex fEventMutex; - SkEvent* fEventQHead, *fEventQTail; - SkEvent* fDelayQHead; - SkDEBUGCODE(int fEventCounter;) -}; - -static SkEvent_Globals& getGlobals() { - // leak this, so we don't incure any shutdown perf hit - static SkEvent_Globals* gGlobals = new SkEvent_Globals; - return *gGlobals; -} - -/////////////////////////////////////////////////////////////////////////////// - -void SkEvent::postDelay(SkMSec delay) { - if (!fTargetID && !fTargetProc) { - delete this; - return; - } - - if (delay) { - this->postTime(GetMSecsSinceStartup() + delay); - return; - } - - SkEvent_Globals& globals = getGlobals(); - - globals.fEventMutex.acquire(); - bool wasEmpty = SkEvent::Enqueue(this); - globals.fEventMutex.release(); - - // call outside of us holding the mutex - if (wasEmpty) { - SkEvent::SignalNonEmptyQueue(); - } -} - -void SkEvent::postTime(SkMSec time) { - if (!fTargetID && !fTargetProc) { - delete this; - return; - } - - SkEvent_Globals& globals = getGlobals(); - - globals.fEventMutex.acquire(); - SkMSec queueDelay = SkEvent::EnqueueTime(this, time); - globals.fEventMutex.release(); - - // call outside of us holding the mutex - if ((int32_t)queueDelay != ~0) { - SkEvent::SignalQueueTimer(queueDelay); - } -} - -bool SkEvent::Enqueue(SkEvent* evt) { - SkEvent_Globals& globals = getGlobals(); - // gEventMutex acquired by caller - - SkASSERT(evt); - - bool wasEmpty = globals.fEventQHead == nullptr; - - if (globals.fEventQTail) - globals.fEventQTail->fNextEvent = evt; - globals.fEventQTail = evt; - if (globals.fEventQHead == nullptr) - globals.fEventQHead = evt; - evt->fNextEvent = nullptr; - - SkDEBUGCODE(++globals.fEventCounter); - - return wasEmpty; -} - -SkEvent* SkEvent::Dequeue() { - SkEvent_Globals& globals = getGlobals(); - globals.fEventMutex.acquire(); - - SkEvent* evt = globals.fEventQHead; - if (evt) { - SkDEBUGCODE(--globals.fEventCounter); - - globals.fEventQHead = evt->fNextEvent; - if (globals.fEventQHead == nullptr) { - globals.fEventQTail = nullptr; - } - } - globals.fEventMutex.release(); - - return evt; -} - -bool SkEvent::QHasEvents() { - SkEvent_Globals& globals = getGlobals(); - - // this is not thread accurate, need a semaphore for that - return globals.fEventQHead != nullptr; -} - -#ifdef SK_TRACE_EVENTS - static int gDelayDepth; -#endif - -SkMSec SkEvent::EnqueueTime(SkEvent* evt, SkMSec time) { - SkEvent_Globals& globals = getGlobals(); - // gEventMutex acquired by caller - - SkEvent* curr = globals.fDelayQHead; - SkEvent* prev = nullptr; - - while (curr) { - if (SkMSec_LT(time, curr->fTime)) { - break; - } - prev = curr; - curr = curr->fNextEvent; - } - - evt->fTime = time; - evt->fNextEvent = curr; - if (prev == nullptr) { - globals.fDelayQHead = evt; - } else { - prev->fNextEvent = evt; - } - - SkMSec delay = globals.fDelayQHead->fTime - GetMSecsSinceStartup(); - if ((int32_t)delay <= 0) { - delay = 1; - } - return delay; -} - -/////////////////////////////////////////////////////////////////////////////// - -#include "SkEventSink.h" - -bool SkEvent::ProcessEvent() { - std::unique_ptr<SkEvent> evt(SkEvent::Dequeue()); - bool again = false; - - EVENT_LOGN("ProcessEvent", (int32_t)evt); - - if (evt) { - (void)SkEventSink::DoEvent(*evt); - again = SkEvent::QHasEvents(); - } - return again; -} - -void SkEvent::ServiceQueueTimer() -{ - SkEvent_Globals& globals = getGlobals(); - - globals.fEventMutex.acquire(); - - bool wasEmpty = false; - SkMSec now = GetMSecsSinceStartup(); - SkEvent* evt = globals.fDelayQHead; - - while (evt) - { - if (SkMSec_LT(now, evt->fTime)) - break; - -#ifdef SK_TRACE_EVENTS - --gDelayDepth; - SkDebugf("dequeue-delay %s (%d)", evt->getType(), gDelayDepth); - const char* idStr = evt->findString("id"); - if (idStr) - SkDebugf(" (%s)", idStr); - SkDebugf("\n"); -#endif - - SkEvent* next = evt->fNextEvent; - if (SkEvent::Enqueue(evt)) - wasEmpty = true; - evt = next; - } - globals.fDelayQHead = evt; - - SkMSec time = evt ? evt->fTime - now : 0; - - globals.fEventMutex.release(); - - if (wasEmpty) - SkEvent::SignalNonEmptyQueue(); - - SkEvent::SignalQueueTimer(time); -} - -int SkEvent::CountEventsOnQueue() { - SkEvent_Globals& globals = getGlobals(); - globals.fEventMutex.acquire(); - - int count = 0; - const SkEvent* evt = globals.fEventQHead; - while (evt) { - count += 1; - evt = evt->fNextEvent; - } - globals.fEventMutex.release(); - - return count; -} - -SkMSec SkEvent::GetMSecsSinceStartup() { - static const double kEpoch = SkTime::GetMSecs(); - return static_cast<SkMSec>(SkTime::GetMSecs() - kEpoch); -} - -/////////////////////////////////////////////////////////////////////////////// - -void SkEvent::Init() {} - -void SkEvent::Term() { - SkEvent_Globals& globals = getGlobals(); - - SkEvent* evt = globals.fEventQHead; - while (evt) { - SkEvent* next = evt->fNextEvent; - delete evt; - evt = next; - } - - evt = globals.fDelayQHead; - while (evt) { - SkEvent* next = evt->fNextEvent; - delete evt; - evt = next; - } -} |