Commit: 523ea570e7e33afba1e05a8a8f8c93e1bec808d3
Author: Lukas Tönne
Date:   Wed Apr 22 15:48:46 2015 +0200
Branches: alembic
https://developer.blender.org/rB523ea570e7e33afba1e05a8a8f8c93e1bec808d3

Make size calculation in cache archive info operators an optional extra
step.

This calculate can take a bit of time (some seconds to a minute in
tests), due to having to loop through all array samples. In many cases
only the basic structure is wanted.

===================================================================

M       release/scripts/startup/bl_ui/properties_object.py
M       source/blender/blenkernel/intern/cache_library.c
M       source/blender/editors/io/io_cache_library.c
M       source/blender/makesrna/intern/rna_cache_library.c
M       source/blender/pointcache/PTC_api.cpp
M       source/blender/pointcache/PTC_api.h
M       source/blender/pointcache/alembic/abc_info.cpp
M       source/blender/pointcache/alembic/abc_reader.cpp
M       source/blender/pointcache/alembic/abc_reader.h
M       source/blender/pointcache/alembic/alembic.h
M       source/blender/pointcache/intern/reader.h

===================================================================

diff --git a/release/scripts/startup/bl_ui/properties_object.py 
b/release/scripts/startup/bl_ui/properties_object.py
index 5e231d4..cb88f38 100644
--- a/release/scripts/startup/bl_ui/properties_object.py
+++ b/release/scripts/startup/bl_ui/properties_object.py
@@ -549,7 +549,7 @@ class OBJECT_PT_cache_archive_info(ObjectButtonsPanel, 
Panel):
                 layout.label(" ")
         if column == 3:
             size = int(node.bytes_size)
-            layout.label(sizeof_fmt(size))
+            layout.label(sizeof_fmt(size) if size >= 0 else "-")
         if column == 4:
             if node.type in {'SCALAR_PROPERTY', 'ARRAY_PROPERTY'}:
                 layout.prop(node, "datatype", text="")
@@ -562,7 +562,7 @@ class OBJECT_PT_cache_archive_info(ObjectButtonsPanel, 
Panel):
                 layout.label(" ")
         if column == 6:
             if node.type in {'ARRAY_PROPERTY'}:
-                layout.prop(node, "array_size", text="")
+                layout.label(node.array_size if node.array_size >= 0 else "-")
             else:
                 layout.label(" ")
 
@@ -573,22 +573,28 @@ class OBJECT_PT_cache_archive_info(ObjectButtonsPanel, 
Panel):
     def draw(self, context):
         ob = context.object
         cachelib = ob.cache_library
+        info = cachelib.archive_info
 
         layout = self.layout
+        
         row = layout.row()
-
         props = row.operator("cachelibrary.archive_info", text="Input", 
icon='QUESTION')
         props.filepath = cachelib.input_filepath
         props.use_cache_info = True
-
         props = row.operator("cachelibrary.archive_info", text="Output", 
icon='QUESTION')
         props.filepath = cachelib.output_filepath
         props.use_cache_info = True
 
-        layout.separator()
-
-        info = cachelib.archive_info
         if info:
+            row = layout.row()
+            row.enabled = bool(info.filepath)
+            props = layout.operator("cachelibrary.archive_info", 
text="Calculate Size", icon='FILE_REFRESH')
+            props.filepath = info.filepath
+            props.use_cache_info = True
+            props.calc_bytes_size = True
+
+            layout.separator()
+
             layout.prop(info, "filepath")
 
             if info.root_node:
diff --git a/source/blender/blenkernel/intern/cache_library.c 
b/source/blender/blenkernel/intern/cache_library.c
index 99b6e9d..81b9967 100644
--- a/source/blender/blenkernel/intern/cache_library.c
+++ b/source/blender/blenkernel/intern/cache_library.c
@@ -1133,6 +1133,10 @@ CacheArchiveInfoNode 
*BKE_cache_archive_info_add_node(CacheArchiveInfo *info, Ca
        node->type = type;
        BLI_strncpy(node->name, name, sizeof(node->name));
        
+       /* these values are only optionally calculated, -1 indicates unknown */
+       node->bytes_size = -1;
+       node->array_size = -1;
+       
        if (parent)
                BLI_addtail(&parent->child_nodes, node);
        else
diff --git a/source/blender/editors/io/io_cache_library.c 
b/source/blender/editors/io/io_cache_library.c
index 2dcadcb..a35402c 100644
--- a/source/blender/editors/io/io_cache_library.c
+++ b/source/blender/editors/io/io_cache_library.c
@@ -579,6 +579,7 @@ static int cache_library_archive_info_exec(bContext *C, 
wmOperator *op)
        Scene *scene = CTX_data_scene(C);
        
        const bool use_cache_info = RNA_boolean_get(op->ptr, "use_cache_info");
+       const bool calc_bytes_size = RNA_boolean_get(op->ptr, 
"calc_bytes_size");
        const bool use_stdout = RNA_boolean_get(op->ptr, "use_stdout");
        const bool use_popup = RNA_boolean_get(op->ptr, "use_popup");
        const bool use_clipboard = RNA_boolean_get(op->ptr, "use_clipboard");
@@ -605,7 +606,7 @@ static int cache_library_archive_info_exec(bContext *C, 
wmOperator *op)
                
                BLI_strncpy(cachelib->archive_info->filepath, filename, 
sizeof(cachelib->archive_info->filepath));
                
-               PTC_get_archive_info_nodes(archive, cachelib->archive_info);
+               PTC_get_archive_info_nodes(archive, cachelib->archive_info, 
calc_bytes_size);
        }
        
        if (use_stdout) {
@@ -641,6 +642,7 @@ void CACHELIBRARY_OT_archive_info(wmOperatorType *ot)
        
        RNA_def_string(ot->srna, "filepath", NULL, FILE_MAX, "File Path", "Path 
to the cache archive");
        RNA_def_boolean(ot->srna, "use_cache_info", false, "Use Cache Library 
Info", "Store info in the cache library");
+       RNA_def_boolean(ot->srna, "calc_bytes_size", false, "Calculate Size", 
"Calculate overall size of nodes in bytes (can take a while)");
        RNA_def_boolean(ot->srna, "use_stdout", false, "Use stdout", "Print 
info in standard output");
        RNA_def_boolean(ot->srna, "use_popup", false, "Show Popup", "Display 
archive info in a popup");
        RNA_def_boolean(ot->srna, "use_clipboard", false, "Copy to Clipboard", 
"Copy archive info to the clipboard");
diff --git a/source/blender/makesrna/intern/rna_cache_library.c 
b/source/blender/makesrna/intern/rna_cache_library.c
index 521f2d5..7b286a7 100644
--- a/source/blender/makesrna/intern/rna_cache_library.c
+++ b/source/blender/makesrna/intern/rna_cache_library.c
@@ -237,7 +237,7 @@ static int 
rna_HairSimulationCacheModifier_hair_system_poll(PointerRNA *ptr, Poi
 static void rna_CacheArchiveInfoNode_bytes_size_get(PointerRNA *ptr, char 
*value)
 {
        CacheArchiveInfoNode *node = ptr->data;
-       BLI_snprintf(value, MAX_NAME, "%lu", node->bytes_size);
+       BLI_snprintf(value, MAX_NAME, "%lld", (long long int)node->bytes_size);
 }
 
 static int rna_CacheArchiveInfoNode_bytes_size_length(PointerRNA *ptr)
@@ -245,7 +245,7 @@ static int 
rna_CacheArchiveInfoNode_bytes_size_length(PointerRNA *ptr)
        char buf[MAX_NAME];
        /* theoretically could do a dummy BLI_snprintf here, but BLI does not 
allow NULL buffer ... */
        CacheArchiveInfoNode *node = ptr->data;
-       return BLI_snprintf(buf, sizeof(buf), "%lu", node->bytes_size);
+       return BLI_snprintf(buf, sizeof(buf), "%lld", (long long 
int)node->bytes_size);
 }
 
 #else
diff --git a/source/blender/pointcache/PTC_api.cpp 
b/source/blender/pointcache/PTC_api.cpp
index 437b1de..77f378f 100644
--- a/source/blender/pointcache/PTC_api.cpp
+++ b/source/blender/pointcache/PTC_api.cpp
@@ -241,10 +241,10 @@ void PTC_get_archive_info_stream(PTCReaderArchive 
*_archive, void (*stream)(void
        archive->get_info_stream(stream, userdata);
 }
 
-void PTC_get_archive_info_nodes(PTCReaderArchive *_archive, struct 
CacheArchiveInfo *info)
+void PTC_get_archive_info_nodes(PTCReaderArchive *_archive, struct 
CacheArchiveInfo *info, bool calc_bytes_size)
 {
        PTC::ReaderArchive *archive = (PTC::ReaderArchive *)_archive;
-       archive->get_info_nodes(info);
+       archive->get_info_nodes(info, calc_bytes_size);
 }
 
 
diff --git a/source/blender/pointcache/PTC_api.h 
b/source/blender/pointcache/PTC_api.h
index dac432d..4437015 100644
--- a/source/blender/pointcache/PTC_api.h
+++ b/source/blender/pointcache/PTC_api.h
@@ -82,7 +82,7 @@ PTCReadSampleResult PTC_read_sample(struct PTCReader *reader, 
float frame);
 PTCReadSampleResult PTC_test_sample(struct PTCReader *reader, float frame);
 
 void PTC_get_archive_info_stream(struct PTCReaderArchive *archive, void 
(*stream)(void *, const char *), void *userdata);
-void PTC_get_archive_info_nodes(struct PTCReaderArchive *_archive, struct 
CacheArchiveInfo *info);
+void PTC_get_archive_info_nodes(struct PTCReaderArchive *_archive, struct 
CacheArchiveInfo *info, bool calc_bytes_size);
 
 struct PTCWriter *PTC_writer_dupligroup(const char *name, struct 
EvaluationContext *eval_ctx, struct Scene *scene, struct Group *group, struct 
CacheLibrary *cachelib);
 struct PTCWriter *PTC_writer_duplicache(const char *name, struct Group *group, 
struct DupliCache *dupcache, int datatypes, bool do_sim_debug);
diff --git a/source/blender/pointcache/alembic/abc_info.cpp 
b/source/blender/pointcache/alembic/abc_info.cpp
index 721623e..589987b 100644
--- a/source/blender/pointcache/alembic/abc_info.cpp
+++ b/source/blender/pointcache/alembic/abc_info.cpp
@@ -283,38 +283,41 @@ void abc_archive_info_stream(IArchive &archive, void 
(*stream)(void *, const cha
 
 /* ========================================================================= */
 
-static void info_nodes_properties(CacheArchiveInfo *info, ICompoundProperty, 
CacheArchiveInfoNode *parent);
+static void info_nodes_properties(CacheArchiveInfo *info, ICompoundProperty, 
CacheArchiveInfoNode *parent, bool calc_bytes_size);
 
 template <class PROP>
-static void info_nodes_array_property(CacheArchiveInfo *info, PROP iProp, 
CacheArchiveInfoNode *parent)
+static void info_nodes_array_property(CacheArchiveInfo *info, PROP iProp, 
CacheArchiveInfoNode *parent, bool calc_bytes_size)
 {
        CacheArchiveInfoNode *node = BKE_cache_archive_info_add_node(info, 
parent, eCacheArchiveInfoNode_Type_ArrayProperty, iProp.getName().c_str());
        
        index_t num_samples = iProp.getNumSamples();
-       size_t max_array_size = 0;
-       size_t tot_array_size = 0;
-       for (index_t i = 0; i < num_samples; ++i) {
-               AbcA::ArraySamplePtr samp;
-               iProp.get(samp, ISampleSelector(i));
-               size_t array_size = samp->size();
-               max_array_size = std::max(max_array_size, array_size);
-               tot_array_size += array_size;
-       }
        
        const DataType &datatype = iProp.getDataType();
        
        node->num_samples = num_samples;
        BLI_strncpy(node->datatype_name, PODName(datatype.getPod()), 
sizeof(node->datatype_name));
        node->datatype_extent = (short)datatype.getExtent();
-       node->bytes_size = datatype.getNumBytes() * tot_array_size;
-       node->array_size = max_array_size;
        
-       if (parent)
-               parent->bytes_size += node->bytes_size;
+       if (calc_bytes_size) {
+               size_t max_array_size = 0;
+               size_t tot_array_size = 0;
+               for (index_t i = 0; i < num_samples; ++i) {
+                       AbcA::ArraySamplePtr samp;
+                       iProp.get(samp, ISampleSelector(i));
+                       size_t array_size = samp->size();
+                       max_array_size = std::max(max_array_size, array_size);
+                       tot_array_size += array_size;
+               }
+               node->bytes_size = datatype.getNumBytes() * tot_array_size;
+               node->array_size = max_array_size;
+               
+               if (parent)
+                       parent->bytes_size += node->bytes_size;
+       }
 }
 
 template <class PROP>
-static void info_nodes_scalar_property(CacheArchiveInfo *info, PROP iProp, 
CacheArchiveInfoNode *parent)
+static void info_nodes_scalar_property(CacheArchiveInfo *info, PROP iProp, 
CacheArchiveInfoNode *parent, bool calc_bytes_size)
 {
        CacheArchiveInfoNode *node = BKE_cache_archive_info_a

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to