sourize
commited on
Commit
·
206fb7a
1
Parent(s):
db43315
Updated Code
Browse files- utils/performance_optimizer.py +36 -41
utils/performance_optimizer.py
CHANGED
|
@@ -5,47 +5,42 @@ Performance optimization utilities for Manim rendering
|
|
| 5 |
import re
|
| 6 |
from typing import Dict, Tuple
|
| 7 |
|
| 8 |
-
# Quality settings for different performance levels
|
| 9 |
-
QUALITY_SETTINGS = {
|
| 10 |
-
"low_quality": {
|
| 11 |
-
"flag": "-ql",
|
| 12 |
-
"description": "Low Quality (Fast)",
|
| 13 |
-
"resolution": "480p",
|
| 14 |
-
"fps": 30,
|
| 15 |
-
"max_duration": 10,
|
| 16 |
-
"max_objects": 20,
|
| 17 |
-
"performance_threshold": {
|
| 18 |
-
"render_time": 60, # seconds
|
| 19 |
-
"memory_usage": 1024 # MB
|
| 20 |
-
}
|
| 21 |
-
},
|
| 22 |
-
"medium_quality": {
|
| 23 |
-
"flag": "-qm",
|
| 24 |
-
"description": "Medium Quality (Balanced)",
|
| 25 |
-
"resolution": "720p",
|
| 26 |
-
"fps": 30,
|
| 27 |
-
"max_duration": 15,
|
| 28 |
-
"max_objects": 30,
|
| 29 |
-
"performance_threshold": {
|
| 30 |
-
"render_time": 180, # seconds
|
| 31 |
-
"memory_usage": 2048 # MB
|
| 32 |
-
}
|
| 33 |
-
}
|
| 34 |
-
}
|
| 35 |
-
|
| 36 |
class PerformanceOptimizer:
|
| 37 |
"""Optimize rendering performance and resource usage"""
|
| 38 |
|
| 39 |
-
#
|
| 40 |
-
|
| 41 |
-
"low_quality":
|
| 42 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 43 |
}
|
| 44 |
|
| 45 |
-
#
|
| 46 |
-
|
| 47 |
-
"
|
| 48 |
-
"
|
|
|
|
| 49 |
}
|
| 50 |
|
| 51 |
@classmethod
|
|
@@ -178,26 +173,26 @@ class PerformanceOptimizer:
|
|
| 178 |
return tips
|
| 179 |
|
| 180 |
def optimize_quality(self, available_memory: float, estimated_render_time: float) -> str:
|
| 181 |
-
if available_memory < self.
|
| 182 |
return "low_quality"
|
| 183 |
-
if estimated_render_time > self.
|
| 184 |
return "low_quality"
|
| 185 |
return "medium_quality"
|
| 186 |
|
| 187 |
@staticmethod
|
| 188 |
def estimate_render_time(quality_level: str) -> int:
|
| 189 |
"""Estimate render time based on quality level"""
|
| 190 |
-
return QUALITY_SETTINGS[quality_level]["performance_threshold"]["render_time"]
|
| 191 |
|
| 192 |
@staticmethod
|
| 193 |
def get_quality_settings(quality_level: str) -> dict:
|
| 194 |
"""Get quality settings for the specified level"""
|
| 195 |
-
return QUALITY_SETTINGS[quality_level]
|
| 196 |
|
| 197 |
@staticmethod
|
| 198 |
def optimize_for_performance(quality_level: str, scene_complexity: int) -> dict:
|
| 199 |
"""Optimize settings based on quality level and scene complexity"""
|
| 200 |
-
settings = QUALITY_SETTINGS[quality_level].copy()
|
| 201 |
|
| 202 |
# Adjust settings based on scene complexity
|
| 203 |
if scene_complexity > settings["max_objects"]:
|
|
|
|
| 5 |
import re
|
| 6 |
from typing import Dict, Tuple
|
| 7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
class PerformanceOptimizer:
|
| 9 |
"""Optimize rendering performance and resource usage"""
|
| 10 |
|
| 11 |
+
# Quality settings for different performance levels
|
| 12 |
+
QUALITY_SETTINGS = {
|
| 13 |
+
"low_quality": {
|
| 14 |
+
"flag": "-ql",
|
| 15 |
+
"description": "Low Quality (Fast)",
|
| 16 |
+
"resolution": "480p",
|
| 17 |
+
"fps": 30,
|
| 18 |
+
"max_duration": 10,
|
| 19 |
+
"max_objects": 20,
|
| 20 |
+
"performance_threshold": {
|
| 21 |
+
"render_time": 60, # seconds
|
| 22 |
+
"memory_usage": 1024 # MB
|
| 23 |
+
}
|
| 24 |
+
},
|
| 25 |
+
"medium_quality": {
|
| 26 |
+
"flag": "-qm",
|
| 27 |
+
"description": "Medium Quality (Balanced)",
|
| 28 |
+
"resolution": "720p",
|
| 29 |
+
"fps": 30,
|
| 30 |
+
"max_duration": 15,
|
| 31 |
+
"max_objects": 30,
|
| 32 |
+
"performance_threshold": {
|
| 33 |
+
"render_time": 180, # seconds
|
| 34 |
+
"memory_usage": 2048 # MB
|
| 35 |
+
}
|
| 36 |
+
}
|
| 37 |
}
|
| 38 |
|
| 39 |
+
# Performance thresholds
|
| 40 |
+
PERFORMANCE_THRESHOLDS = {
|
| 41 |
+
"render_time": 300, # seconds
|
| 42 |
+
"memory_usage": 4096, # MB
|
| 43 |
+
"cpu_usage": 80 # percentage
|
| 44 |
}
|
| 45 |
|
| 46 |
@classmethod
|
|
|
|
| 173 |
return tips
|
| 174 |
|
| 175 |
def optimize_quality(self, available_memory: float, estimated_render_time: float) -> str:
|
| 176 |
+
if available_memory < self.PERFORMANCE_THRESHOLDS["memory_usage"]:
|
| 177 |
return "low_quality"
|
| 178 |
+
if estimated_render_time > self.PERFORMANCE_THRESHOLDS["render_time"]:
|
| 179 |
return "low_quality"
|
| 180 |
return "medium_quality"
|
| 181 |
|
| 182 |
@staticmethod
|
| 183 |
def estimate_render_time(quality_level: str) -> int:
|
| 184 |
"""Estimate render time based on quality level"""
|
| 185 |
+
return PerformanceOptimizer.QUALITY_SETTINGS[quality_level]["performance_threshold"]["render_time"]
|
| 186 |
|
| 187 |
@staticmethod
|
| 188 |
def get_quality_settings(quality_level: str) -> dict:
|
| 189 |
"""Get quality settings for the specified level"""
|
| 190 |
+
return PerformanceOptimizer.QUALITY_SETTINGS[quality_level]
|
| 191 |
|
| 192 |
@staticmethod
|
| 193 |
def optimize_for_performance(quality_level: str, scene_complexity: int) -> dict:
|
| 194 |
"""Optimize settings based on quality level and scene complexity"""
|
| 195 |
+
settings = PerformanceOptimizer.QUALITY_SETTINGS[quality_level].copy()
|
| 196 |
|
| 197 |
# Adjust settings based on scene complexity
|
| 198 |
if scene_complexity > settings["max_objects"]:
|