1363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger/* 2363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger * Copyright 2012 Google Inc. 3363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger * 4363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger * Use of this source code is governed by a BSD-style license that can be 5363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger * found in the LICENSE file. 6363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger */ 7363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger 8363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger#include "SkCountdown.h" 9363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger#include "SkThread.h" 10363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger 11363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek SollenbergerSkCountdown::SkCountdown(int32_t count) 12363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger: fCount(count) {} 13363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger 14363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenbergervoid SkCountdown::reset(int32_t count) { 15363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger fCount = count; 16363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger} 17363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger 18363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenbergervoid SkCountdown::run() { 19363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger if (sk_atomic_dec(&fCount) == 1) { 20363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger fReady.lock(); 21363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger fReady.signal(); 22363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger fReady.unlock(); 23363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger } 24363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger} 25363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger 26363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenbergervoid SkCountdown::wait() { 27363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger fReady.lock(); 28363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger while (fCount > 0) { 29363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger fReady.wait(); 30363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger } 31363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger fReady.unlock(); 32363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger} 33