Index: skia/ports/SkOSEvent_android.cpp |
=================================================================== |
--- skia/ports/SkOSEvent_android.cpp (revision 16859) |
+++ skia/ports/SkOSEvent_android.cpp (working copy) |
@@ -1,155 +0,0 @@ |
-/* libs/graphics/ports/SkOSEvent_android.cpp |
-** |
-** Copyright 2006, The Android Open Source Project |
-** |
-** Licensed under the Apache License, Version 2.0 (the "License"); |
-** you may not use this file except in compliance with the License. |
-** You may obtain a copy of the License at |
-** |
-** http://www.apache.org/licenses/LICENSE-2.0 |
-** |
-** Unless required by applicable law or agreed to in writing, software |
-** distributed under the License is distributed on an "AS IS" BASIS, |
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-** See the License for the specific language governing permissions and |
-** limitations under the License. |
-*/ |
- |
-#include "SkEvent.h" |
-#include "utils/threads.h" |
-#include <stdio.h> |
- |
-using namespace android; |
- |
-Mutex gEventQMutex; |
-Condition gEventQCondition; |
- |
-void SkEvent::SignalNonEmptyQueue() |
-{ |
- gEventQCondition.broadcast(); |
-} |
- |
-/////////////////////////////////////////////////////////////////// |
- |
-#ifdef FMS_ARCH_ANDROID_ARM |
- |
-// don't have pthreads.h, and therefore no timedwait(), so we punt for the demo |
- |
-void SkEvent::SignalQueueTimer(SkMSec delay) |
-{ |
-} |
- |
-void SkEvent_start_timer_thread() |
-{ |
-} |
- |
-void SkEvent_stop_timer_thread() |
-{ |
-} |
- |
-#else |
- |
-#include <pthread.h> |
-#include <errno.h> |
- |
-static pthread_t gTimerThread; |
-static pthread_mutex_t gTimerMutex; |
-static pthread_cond_t gTimerCond; |
-static timespec gTimeSpec; |
- |
-static void* timer_event_thread_proc(void*) |
-{ |
- for (;;) |
- { |
- int status; |
- |
- pthread_mutex_lock(&gTimerMutex); |
- |
- timespec spec = gTimeSpec; |
- // mark our global to be zero |
- // so we don't call timedwait again on a stale value |
- gTimeSpec.tv_sec = 0; |
- gTimeSpec.tv_nsec = 0; |
- |
- if (spec.tv_sec == 0 && spec.tv_nsec == 0) |
- status = pthread_cond_wait(&gTimerCond, &gTimerMutex); |
- else |
- status = pthread_cond_timedwait(&gTimerCond, &gTimerMutex, &spec); |
- |
- if (status == 0) // someone signaled us with a new time |
- { |
- pthread_mutex_unlock(&gTimerMutex); |
- } |
- else |
- { |
- SkASSERT(status == ETIMEDOUT); // no need to unlock the mutex (its unlocked) |
- // this is the payoff. Signal the event queue to wake up |
- // and also check the delay-queue |
- gEventQCondition.broadcast(); |
- } |
- } |
- return 0; |
-} |
- |
-#define kThousand (1000) |
-#define kMillion (kThousand * kThousand) |
-#define kBillion (kThousand * kThousand * kThousand) |
- |
-void SkEvent::SignalQueueTimer(SkMSec delay) |
-{ |
- pthread_mutex_lock(&gTimerMutex); |
- |
- if (delay) |
- { |
- struct timeval tv; |
- gettimeofday(&tv, NULL); |
- |
- // normalize tv |
- if (tv.tv_usec >= kMillion) |
- { |
- tv.tv_sec += tv.tv_usec / kMillion; |
- tv.tv_usec %= kMillion; |
- } |
- |
- // add tv + delay, scale each up to land on nanoseconds |
- gTimeSpec.tv_nsec = (tv.tv_usec + (delay % kThousand) * kThousand) * kThousand; |
- gTimeSpec.tv_sec = (tv.tv_sec + (delay / kThousand) * kThousand) * kThousand; |
- |
- // check for overflow in nsec |
- if ((unsigned long)gTimeSpec.tv_nsec >= kBillion) |
- { |
- gTimeSpec.tv_nsec -= kBillion; |
- gTimeSpec.tv_sec += 1; |
- SkASSERT((unsigned long)gTimeSpec.tv_nsec < kBillion); |
- } |
- |
- // printf("SignalQueueTimer(%d) timespec(%d %d)\n", delay, gTimeSpec.tv_sec, gTimeSpec.tv_nsec); |
- } |
- else // cancel the timer |
- { |
- gTimeSpec.tv_nsec = 0; |
- gTimeSpec.tv_sec = 0; |
- } |
- |
- pthread_mutex_unlock(&gTimerMutex); |
- pthread_cond_signal(&gTimerCond); |
-} |
- |
-void SkEvent_start_timer_thread() |
-{ |
- int status; |
- pthread_attr_t attr; |
- |
- status = pthread_attr_init(&attr); |
- SkASSERT(status == 0); |
- status = pthread_create(&gTimerThread, &attr, timer_event_thread_proc, 0); |
- SkASSERT(status == 0); |
-} |
- |
-void SkEvent_stop_timer_thread() |
-{ |
- int status = pthread_cancel(gTimerThread); |
- SkASSERT(status == 0); |
-} |
- |
-#endif |