1d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com#ifndef DMReporter_DEFINED
2d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com#define DMReporter_DEFINED
3d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
4d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com#include "SkString.h"
5d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com#include "SkTArray.h"
6d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com#include "SkThread.h"
7a39874b636f9954c6da335733fed646ba33dd614commit-bot@chromium.org#include "SkTime.h"
8d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com#include "SkTypes.h"
9d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
10d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com// Used to report status changes including failures.  All public methods are threadsafe.
11d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.comnamespace DM {
12d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
13d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.comclass Reporter : SkNoncopyable {
14d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.compublic:
1539e8d93337c7e37d2b09dc710a05a9beefef5c2ccommit-bot@chromium.org    Reporter() : fPending(0), fFailed(0) {}
16d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
1739e8d93337c7e37d2b09dc710a05a9beefef5c2ccommit-bot@chromium.org    void taskCreated()   { sk_atomic_inc(&fPending); }
1839e8d93337c7e37d2b09dc710a05a9beefef5c2ccommit-bot@chromium.org    void taskDestroyed() { sk_atomic_dec(&fPending); }
190dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org    void fail(SkString msg);
20d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
2139e8d93337c7e37d2b09dc710a05a9beefef5c2ccommit-bot@chromium.org    void printStatus(SkString name, SkMSec timeMs) const;
22d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
23d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com    void getFailures(SkTArray<SkString>*) const;
24d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
25d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.comprivate:
2639e8d93337c7e37d2b09dc710a05a9beefef5c2ccommit-bot@chromium.org    int32_t fPending; // atomic
2739e8d93337c7e37d2b09dc710a05a9beefef5c2ccommit-bot@chromium.org    int32_t fFailed;  // atomic, == fFailures.count().
28d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
29d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com    mutable SkMutex fMutex;  // Guards fFailures.
30d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com    SkTArray<SkString> fFailures;
31d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com};
32d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
33d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
34d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com}  // namespace DM
35d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
36d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com#endif  // DMReporter_DEFINED
37