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#ifndef SkCountdown_DEFINED
9363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger#define SkCountdown_DEFINED
10363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger
11363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger#include "SkCondVar.h"
12363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger#include "SkRunnable.h"
13363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger#include "SkTypes.h"
14363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger
15363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenbergerclass SkCountdown : public SkRunnable {
16363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenbergerpublic:
17363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    explicit SkCountdown(int32_t count);
18363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger
19363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    /**
20363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger     * Resets the countdown to the count provided.
21363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger     */
22363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    void reset(int32_t count);
23363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger
24363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    virtual void run() SK_OVERRIDE;
25363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger
26363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    /**
27363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger     * Blocks until run() has been called count times.
28363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger     */
29363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    void wait();
30363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger
31363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenbergerprivate:
32363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    SkCondVar fReady;
33363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    int32_t   fCount;
34363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger};
35363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger
36363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger#endif
37