Cleanup/sanitize usages of G.debug_value.
authorBastien Montagne <montagne29@wanadoo.fr>
Wed, 16 Jan 2019 18:41:29 +0000 (19:41 +0100)
committerBastien Montagne <montagne29@wanadoo.fr>
Wed, 16 Jan 2019 18:43:53 +0000 (19:43 +0100)
There was no documentation at all, some very bad practices (like using
G.debug_value > 0 as some sort of global debug print switch), and even
an overlapping use of '1' value...

Also, python setter did not check for valid range (since this is a
short, not an int).

source/blender/blenkernel/BKE_global.h
source/blender/blenkernel/intern/cloth.c
source/blender/editors/screen/area.c
source/blender/modifiers/intern/MOD_cloth.c
source/blender/modifiers/intern/MOD_collision.c
source/blender/python/intern/bpy_app.c

index b29916797757af046f449f5534c9868fa9b0b240..97e23a952db4c9aab7688f3e84041ec5b554023e 100644 (file)
@@ -73,7 +73,21 @@ typedef struct Global {
        /* to indicate render is busy, prevent renderwindow events etc */
        bool is_rendering;
 
-       /* debug value, can be set from the UI and python, used for testing nonstandard features */
+       /* Debug value, can be set from the UI and python, used for testing nonstandard features.
+        * DO NOT abuse it with generic checks like `if (G.debug_value > 0)`. Do not use it as bitflags.
+        * Only precise specific values should be checked for, to avoid unpredictable side-effects.
+        * Please document here the value(s) you are using (or a range of values reserved to some area).
+        *   * -16384 and below: Reserved for python (add-ons) usage.
+        *   *     -1: Disable faster motion paths computation (since 08/2018).
+        *   * 1 - 30: EEVEE debug/stats values (01/2018).
+        *   *    101: Enable UI debug drawing of fullscreen area's corner widget (10/2014).
+        *   *    527: Old mysterious switch in behavior of MeshDeform modifier (before 04/2010).
+        *   *    777: Enable UI node panel's sockets polling (11/2011).
+        *   *    799: Enable some mysterious new depsgraph behavior (05/2015).
+        *   *   1112: Disable new Cloth internal springs hanlding (09/2014).
+        *   *   1234: Disable new dyntopo code fixing skinny faces generation (04/2015).
+        *   * 16384 and above: Reserved for python (add-ons) usage.
+        */
        short debug_value;
 
        /* saved to the blend file as FileGlobal.globalf,
index 30b5d92bdb7ca8386b0ca075e72b4f48cbfabee8..47afef444cf78d098b9a84eec17b84bf83529a1e 100644 (file)
@@ -515,8 +515,9 @@ void cloth_free_modifier(ClothModifierData *clmd )
 void cloth_free_modifier_extern(ClothModifierData *clmd )
 {
        Cloth   *cloth = NULL;
-       if (G.debug_value > 0)
+       if (G.debug & G_DEBUG_SIMDATA) {
                printf("cloth_free_modifier_extern\n");
+       }
 
        if ( !clmd )
                return;
@@ -524,8 +525,9 @@ void cloth_free_modifier_extern(ClothModifierData *clmd )
        cloth = clmd->clothObject;
 
        if ( cloth ) {
-               if (G.debug_value > 0)
+               if (G.debug & G_DEBUG_SIMDATA) {
                        printf("cloth_free_modifier_extern in\n");
+               }
 
                BPH_cloth_solver_free(clmd);
 
@@ -728,8 +730,9 @@ static int cloth_from_object(Object *ob, ClothModifierData *clmd, Mesh *mesh, fl
        // If we have a clothObject, free it.
        if ( clmd->clothObject != NULL ) {
                cloth_free_modifier ( clmd );
-               if (G.debug_value > 0)
+               if (G.debug & G_DEBUG_SIMDATA) {
                        printf("cloth_free_modifier cloth_from_object\n");
+               }
        }
 
        // Allocate a new cloth object.
index 34a20c8ccf796200a743028b2fb3e04a26dc8a7e..76c907a964a25240fc87115e20950309690e1fc2 100644 (file)
@@ -210,7 +210,7 @@ static void area_draw_azone_fullscreen(short x1, short y1, short x2, short y2, f
         * The click_rect is the same as defined in fullscreen_click_rcti_init
         * Keep them both in sync */
 
-       if (G.debug_value == 1) {
+       if (G.debug_value == 101) {
                rcti click_rect;
                float icon_size = UI_DPI_ICON_SIZE + 7 * UI_DPI_FAC;
 
index 636c465d30423d8012a5384d1ab00614d9adba24..0c7c701e5e5fc73111d7c7083a631b3649a9467b 100644 (file)
@@ -201,8 +201,9 @@ static void freeData(ModifierData *md)
        ClothModifierData *clmd = (ClothModifierData *) md;
 
        if (clmd) {
-               if (G.debug_value > 0)
+               if (G.debug & G_DEBUG_SIMDATA) {
                        printf("clothModifier_freeData\n");
+               }
 
                cloth_free_modifier_extern(clmd);
 
index 011635e3012fdd8c44806cf2ffb3fe013f6561cb..7f4a0b91dbf77925ec5d8d79fc9ec39655bc45b0 100644 (file)
@@ -141,8 +141,9 @@ static void deformVerts(
 
                current_time = DEG_get_ctime(ctx->depsgraph);
 
-               if (G.debug_value > 0)
+               if (G.debug & G_DEBUG_SIMDATA) {
                        printf("current_time %f, collmd->time_xnew %f\n", current_time, collmd->time_xnew);
+               }
 
                mvert_num = mesh_src->totvert;
 
index bba9eee03168927c639d39430541c528e9f8ecc2..01c8573f58919ea78aad95a713ef4a32a1ef743f 100644 (file)
@@ -297,7 +297,7 @@ static PyObject *bpy_app_binary_path_python_get(PyObject *self, void *UNUSED(clo
 }
 
 PyDoc_STRVAR(bpy_app_debug_value_doc,
-"Int, number which can be set to non-zero values for testing purposes"
+"Short, number which can be set to non-zero values for testing purposes"
 );
 static PyObject *bpy_app_debug_value_get(PyObject *UNUSED(self), void *UNUSED(closure))
 {
@@ -313,7 +313,13 @@ static int bpy_app_debug_value_set(PyObject *UNUSED(self), PyObject *value, void
                return -1;
        }
 
-       G.debug_value = param;
+       if (param < SHRT_MIN || param > SHRT_MAX) {
+               PyErr_SetString(PyExc_ValueError,
+                               "bpy.app.debug_value can only be set to short range [-32768, 32767]");
+               return -1;
+       }
+
+       G.debug_value = (short)param;
 
        WM_main_add_notifier(NC_WINDOW, NULL);