Home | History | Annotate | Download | only in core
      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 thats
     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