Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/cycles/render/stats.cpp')
-rw-r--r--intern/cycles/render/stats.cpp382
1 files changed, 0 insertions, 382 deletions
diff --git a/intern/cycles/render/stats.cpp b/intern/cycles/render/stats.cpp
deleted file mode 100644
index 73eb7e21ff9..00000000000
--- a/intern/cycles/render/stats.cpp
+++ /dev/null
@@ -1,382 +0,0 @@
-/*
- * Copyright 2011-2018 Blender Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "render/stats.h"
-#include "render/object.h"
-#include "util/util_algorithm.h"
-#include "util/util_foreach.h"
-#include "util/util_string.h"
-
-CCL_NAMESPACE_BEGIN
-
-static int kIndentNumSpaces = 2;
-
-/* Named size entry. */
-
-namespace {
-
-bool namedSizeEntryComparator(const NamedSizeEntry &a, const NamedSizeEntry &b)
-{
- /* We sort in descending order. */
- return a.size > b.size;
-}
-
-bool namedTimeEntryComparator(const NamedTimeEntry &a, const NamedTimeEntry &b)
-{
- /* We sort in descending order. */
- return a.time > b.time;
-}
-
-bool namedTimeSampleEntryComparator(const NamedNestedSampleStats &a,
- const NamedNestedSampleStats &b)
-{
- return a.sum_samples > b.sum_samples;
-}
-
-bool namedSampleCountPairComparator(const NamedSampleCountPair &a, const NamedSampleCountPair &b)
-{
- return a.samples > b.samples;
-}
-
-} // namespace
-
-NamedSizeEntry::NamedSizeEntry() : name(""), size(0)
-{
-}
-
-NamedSizeEntry::NamedSizeEntry(const string &name, size_t size) : name(name), size(size)
-{
-}
-
-NamedTimeEntry::NamedTimeEntry() : name(""), time(0)
-{
-}
-
-NamedTimeEntry::NamedTimeEntry(const string &name, double time) : name(name), time(time)
-{
-}
-
-/* Named size statistics. */
-
-NamedSizeStats::NamedSizeStats() : total_size(0)
-{
-}
-
-void NamedSizeStats::add_entry(const NamedSizeEntry &entry)
-{
- total_size += entry.size;
- entries.push_back(entry);
-}
-
-string NamedSizeStats::full_report(int indent_level)
-{
- const string indent(indent_level * kIndentNumSpaces, ' ');
- const string double_indent = indent + indent;
- string result = "";
- result += string_printf("%sTotal memory: %s (%s)\n",
- indent.c_str(),
- string_human_readable_size(total_size).c_str(),
- string_human_readable_number(total_size).c_str());
- sort(entries.begin(), entries.end(), namedSizeEntryComparator);
- foreach (const NamedSizeEntry &entry, entries) {
- result += string_printf("%s%-32s %s (%s)\n",
- double_indent.c_str(),
- entry.name.c_str(),
- string_human_readable_size(entry.size).c_str(),
- string_human_readable_number(entry.size).c_str());
- }
- return result;
-}
-
-string NamedTimeStats::full_report(int indent_level)
-{
- const string indent(indent_level * kIndentNumSpaces, ' ');
- const string double_indent = indent + indent;
- string result = "";
- result += string_printf("%sTotal time: %fs\n", indent.c_str(), total_time);
- sort(entries.begin(), entries.end(), namedTimeEntryComparator);
- foreach (const NamedTimeEntry &entry, entries) {
- result += string_printf(
- "%s%-40s %fs\n", double_indent.c_str(), entry.name.c_str(), entry.time);
- }
- return result;
-}
-
-/* Named time sample statistics. */
-
-NamedNestedSampleStats::NamedNestedSampleStats() : name(""), self_samples(0), sum_samples(0)
-{
-}
-
-NamedNestedSampleStats::NamedNestedSampleStats(const string &name, uint64_t samples)
- : name(name), self_samples(samples), sum_samples(samples)
-{
-}
-
-NamedNestedSampleStats &NamedNestedSampleStats::add_entry(const string &name_, uint64_t samples_)
-{
- entries.push_back(NamedNestedSampleStats(name_, samples_));
- return entries[entries.size() - 1];
-}
-
-void NamedNestedSampleStats::update_sum()
-{
- sum_samples = self_samples;
- foreach (NamedNestedSampleStats &entry, entries) {
- entry.update_sum();
- sum_samples += entry.sum_samples;
- }
-}
-
-string NamedNestedSampleStats::full_report(int indent_level, uint64_t total_samples)
-{
- update_sum();
-
- if (total_samples == 0) {
- total_samples = sum_samples;
- }
-
- const string indent(indent_level * kIndentNumSpaces, ' ');
-
- const double sum_percent = 100 * ((double)sum_samples) / total_samples;
- const double sum_seconds = sum_samples * 0.001;
- const double self_percent = 100 * ((double)self_samples) / total_samples;
- const double self_seconds = self_samples * 0.001;
- string info = string_printf("%-32s: Total %3.2f%% (%.2fs), Self %3.2f%% (%.2fs)\n",
- name.c_str(),
- sum_percent,
- sum_seconds,
- self_percent,
- self_seconds);
- string result = indent + info;
-
- sort(entries.begin(), entries.end(), namedTimeSampleEntryComparator);
- foreach (NamedNestedSampleStats &entry, entries) {
- result += entry.full_report(indent_level + 1, total_samples);
- }
- return result;
-}
-
-/* Named sample count pairs. */
-
-NamedSampleCountPair::NamedSampleCountPair(const ustring &name, uint64_t samples, uint64_t hits)
- : name(name), samples(samples), hits(hits)
-{
-}
-
-NamedSampleCountStats::NamedSampleCountStats()
-{
-}
-
-void NamedSampleCountStats::add(const ustring &name, uint64_t samples, uint64_t hits)
-{
- entry_map::iterator entry = entries.find(name);
- if (entry != entries.end()) {
- entry->second.samples += samples;
- entry->second.hits += hits;
- return;
- }
- entries.emplace(name, NamedSampleCountPair(name, samples, hits));
-}
-
-string NamedSampleCountStats::full_report(int indent_level)
-{
- const string indent(indent_level * kIndentNumSpaces, ' ');
-
- vector<NamedSampleCountPair> sorted_entries;
- sorted_entries.reserve(entries.size());
-
- uint64_t total_hits = 0, total_samples = 0;
- foreach (entry_map::const_reference entry, entries) {
- const NamedSampleCountPair &pair = entry.second;
-
- total_hits += pair.hits;
- total_samples += pair.samples;
-
- sorted_entries.push_back(pair);
- }
- const double avg_samples_per_hit = ((double)total_samples) / total_hits;
-
- sort(sorted_entries.begin(), sorted_entries.end(), namedSampleCountPairComparator);
-
- string result = "";
- foreach (const NamedSampleCountPair &entry, sorted_entries) {
- const double seconds = entry.samples * 0.001;
- const double relative = ((double)entry.samples) / (entry.hits * avg_samples_per_hit);
-
- result += indent +
- string_printf(
- "%-32s: %.2fs (Relative cost: %.2f)\n", entry.name.c_str(), seconds, relative);
- }
- return result;
-}
-
-/* Mesh statistics. */
-
-MeshStats::MeshStats()
-{
-}
-
-string MeshStats::full_report(int indent_level)
-{
- const string indent(indent_level * kIndentNumSpaces, ' ');
- string result = "";
- result += indent + "Geometry:\n" + geometry.full_report(indent_level + 1);
- return result;
-}
-
-/* Image statistics. */
-
-ImageStats::ImageStats()
-{
-}
-
-string ImageStats::full_report(int indent_level)
-{
- const string indent(indent_level * kIndentNumSpaces, ' ');
- string result = "";
- result += indent + "Textures:\n" + textures.full_report(indent_level + 1);
- return result;
-}
-
-/* Overall statistics. */
-
-RenderStats::RenderStats()
-{
- has_profiling = false;
-}
-
-void RenderStats::collect_profiling(Scene *scene, Profiler &prof)
-{
- has_profiling = true;
-
- kernel = NamedNestedSampleStats("Total render time", prof.get_event(PROFILING_UNKNOWN));
- kernel.add_entry("Ray setup", prof.get_event(PROFILING_RAY_SETUP));
- kernel.add_entry("Intersect Closest", prof.get_event(PROFILING_INTERSECT_CLOSEST));
- kernel.add_entry("Intersect Shadow", prof.get_event(PROFILING_INTERSECT_SHADOW));
- kernel.add_entry("Intersect Subsurface", prof.get_event(PROFILING_INTERSECT_SUBSURFACE));
- kernel.add_entry("Intersect Volume Stack", prof.get_event(PROFILING_INTERSECT_VOLUME_STACK));
-
- NamedNestedSampleStats &surface = kernel.add_entry("Shade Surface", 0);
- surface.add_entry("Setup", prof.get_event(PROFILING_SHADE_SURFACE_SETUP));
- surface.add_entry("Shader Evaluation", prof.get_event(PROFILING_SHADE_SURFACE_EVAL));
- surface.add_entry("Render Passes", prof.get_event(PROFILING_SHADE_SURFACE_PASSES));
- surface.add_entry("Direct Light", prof.get_event(PROFILING_SHADE_SURFACE_DIRECT_LIGHT));
- surface.add_entry("Indirect Light", prof.get_event(PROFILING_SHADE_SURFACE_INDIRECT_LIGHT));
- surface.add_entry("Ambient Occlusion", prof.get_event(PROFILING_SHADE_SURFACE_AO));
-
- NamedNestedSampleStats &volume = kernel.add_entry("Shade Volume", 0);
- volume.add_entry("Setup", prof.get_event(PROFILING_SHADE_VOLUME_SETUP));
- volume.add_entry("Integrate", prof.get_event(PROFILING_SHADE_VOLUME_INTEGRATE));
- volume.add_entry("Direct Light", prof.get_event(PROFILING_SHADE_VOLUME_DIRECT_LIGHT));
- volume.add_entry("Indirect Light", prof.get_event(PROFILING_SHADE_VOLUME_INDIRECT_LIGHT));
-
- NamedNestedSampleStats &shadow = kernel.add_entry("Shade Shadow", 0);
- shadow.add_entry("Setup", prof.get_event(PROFILING_SHADE_SHADOW_SETUP));
- shadow.add_entry("Surface", prof.get_event(PROFILING_SHADE_SHADOW_SURFACE));
- shadow.add_entry("Volume", prof.get_event(PROFILING_SHADE_SHADOW_VOLUME));
-
- NamedNestedSampleStats &light = kernel.add_entry("Shade Light", 0);
- light.add_entry("Setup", prof.get_event(PROFILING_SHADE_LIGHT_SETUP));
- light.add_entry("Shader Evaluation", prof.get_event(PROFILING_SHADE_LIGHT_EVAL));
-
- shaders.entries.clear();
- foreach (Shader *shader, scene->shaders) {
- uint64_t samples, hits;
- if (prof.get_shader(shader->id, samples, hits)) {
- shaders.add(shader->name, samples, hits);
- }
- }
-
- objects.entries.clear();
- foreach (Object *object, scene->objects) {
- uint64_t samples, hits;
- if (prof.get_object(object->get_device_index(), samples, hits)) {
- objects.add(object->name, samples, hits);
- }
- }
-}
-
-string RenderStats::full_report()
-{
- string result = "";
- result += "Mesh statistics:\n" + mesh.full_report(1);
- result += "Image statistics:\n" + image.full_report(1);
- if (has_profiling) {
- result += "Kernel statistics:\n" + kernel.full_report(1);
- result += "Shader statistics:\n" + shaders.full_report(1);
- result += "Object statistics:\n" + objects.full_report(1);
- }
- else {
- result += "Profiling information not available (only works with CPU rendering)";
- }
- return result;
-}
-
-NamedTimeStats::NamedTimeStats() : total_time(0.0)
-{
-}
-
-string UpdateTimeStats::full_report(int indent_level)
-{
- return times.full_report(indent_level + 1);
-}
-
-SceneUpdateStats::SceneUpdateStats()
-{
-}
-
-string SceneUpdateStats::full_report()
-{
- string result = "";
- result += "Scene:\n" + scene.full_report(1);
- result += "Geometry:\n" + geometry.full_report(1);
- result += "Light:\n" + light.full_report(1);
- result += "Object:\n" + object.full_report(1);
- result += "Image:\n" + image.full_report(1);
- result += "Background:\n" + background.full_report(1);
- result += "Bake:\n" + bake.full_report(1);
- result += "Camera:\n" + camera.full_report(1);
- result += "Film:\n" + film.full_report(1);
- result += "Integrator:\n" + integrator.full_report(1);
- result += "OSL:\n" + osl.full_report(1);
- result += "Particles:\n" + particles.full_report(1);
- result += "SVM:\n" + svm.full_report(1);
- result += "Tables:\n" + tables.full_report(1);
- result += "Procedurals:\n" + procedurals.full_report(1);
- return result;
-}
-
-void SceneUpdateStats::clear()
-{
- geometry.times.clear();
- image.times.clear();
- light.times.clear();
- object.times.clear();
- background.times.clear();
- bake.times.clear();
- camera.times.clear();
- film.times.clear();
- integrator.times.clear();
- osl.times.clear();
- particles.times.clear();
- scene.times.clear();
- svm.times.clear();
- tables.times.clear();
- procedurals.times.clear();
-}
-
-CCL_NAMESPACE_END