1/*
2 * Copyright 2013 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SkError_DEFINED
9#define SkError_DEFINED
10
11
12/** \file SkError.h
13*/
14
15enum SkError {
16    /** All is well
17     */
18    kNoError_SkError=0,
19
20    /** User argument passed to Skia function was invalid: NULL when that’s
21     *  not allowed, out of numeric range, bad enum, or violating some
22     *  other general precondition.
23     */
24    kInvalidArgument_SkError,
25
26    /** User tried to perform some operation in a state when the operation
27     *  was not legal, or the operands make no sense (e.g., asking for
28     *  pixels from an SkPictureCanvas).  Other examples might be
29     *  inset()’ing a rectangle to make it degenerate (negative width/height).
30     */
31    kInvalidOperation_SkError,
32
33    /** Probably not needed right now, but in the future we could have opaque
34     *  handles for SkPictures floating around, and it would be a good idea
35     *  to anticipate this kind of issue.
36     */
37    kInvalidHandle_SkError,
38
39    /** This is probably not possible because paint surely has defaults for
40     *  everything, but perhaps a paint can get into a bad state somehow.
41     */
42    kInvalidPaint_SkError,
43
44    /** Skia was unable to allocate memory to perform some task.
45     */
46    kOutOfMemory_SkError,
47
48    /** Skia failed while trying to consume some external resource.
49     */
50    kParseError_SkError,
51
52    /** Something went wrong internally; could be resource exhaustion but
53      * will often be a bug.
54     */
55    kInternalError_SkError
56};
57
58/** Return the current per-thread error code.  Error codes are "sticky"; they
59 *  are not not reset by subsequent successful operations.
60 */
61SkError SkGetLastError();
62
63/** Clear the current per-thread error code back to kNoError_SkError.
64 */
65void SkClearLastError();
66
67/** Type for callback functions to be invoked whenever an error is registered.
68 *  Callback functions take the error code being set, as well as a context
69 *  argument that is provided when the callback is registered.
70 */
71typedef void (*SkErrorCallbackFunction)(SkError, void *);
72
73/** Set the current per-thread error callback.
74 *
75 *  @param cb The callback function to be invoked.  Passing NULL
76 *            for cb will revert to the default error callback which
77 *            does nothing on release builds, but on debug builds will
78 *            print an informative error message to the screen.
79 *  @param context An arbitrary pointer that will be passed to
80 *                 the provided callback function.
81 */
82void SkSetErrorCallback(SkErrorCallbackFunction cb, void *context);
83
84/** Get a human-readable description of the last (per-thread) error that
85 *  occurred.  The returned error message will include not only a human
86 *  readable version of the error code, but also information about the
87 *  conditions that led to the error itself.
88 */
89const char *SkGetLastErrorString();
90
91#endif /* SkError_DEFINED */
92