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 
15 enum 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  */
61 SkError SkGetLastError();
62 
63 /** Clear the current per-thread error code back to kNoError_SkError.
64  */
65 void 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  */
71 typedef 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  */
82 void 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  */
89 const char *SkGetLastErrorString();
90 
91 #endif /* SkError_DEFINED */
92