|
|
@@ -156,6 +156,16 @@ public:
|
|
|
{
|
|
|
std::lock_guard<std::mutex> lock(jobsMutex);
|
|
|
if (activeJobs.find(request.id) != activeJobs.end()) {
|
|
|
+ float finalProgress = activeJobs[request.id].progress;
|
|
|
+ auto completionTime = std::chrono::steady_clock::now();
|
|
|
+ auto totalGenerationTime = std::chrono::duration_cast<std::chrono::milliseconds>(completionTime - startTime).count();
|
|
|
+
|
|
|
+ std::cout << "[TIMING_ANALYSIS] Job " << request.id
|
|
|
+ << " - Total generation time: " << totalGenerationTime << "ms" << std::endl;
|
|
|
+ std::cout << "[JOB_COMPLETION] Job " << request.id
|
|
|
+ << " - Status changing to '" << (result.success ? "completed" : "failed") << "'"
|
|
|
+ << " - Progress at completion: " << std::fixed << std::setprecision(2) << (finalProgress * 100.0f) << "%" << std::endl;
|
|
|
+
|
|
|
activeJobs[request.id].status = result.success ? GenerationStatus::COMPLETED : GenerationStatus::FAILED;
|
|
|
activeJobs[request.id].endTime = endTime;
|
|
|
|
|
|
@@ -171,6 +181,15 @@ public:
|
|
|
activeJobs[request.id].outputFiles = result.imagePaths;
|
|
|
activeJobs[request.id].errorMessage = result.errorMessage;
|
|
|
|
|
|
+ std::cout << "[DEBUG] Job " << request.id << " completed. Success: " << (result.success ? "true" : "false")
|
|
|
+ << ", Image paths: " << result.imagePaths.size() << std::endl;
|
|
|
+ for (size_t i = 0; i < result.imagePaths.size(); ++i) {
|
|
|
+ std::cout << "[DEBUG] Image " << i << ": " << result.imagePaths[i] << std::endl;
|
|
|
+ }
|
|
|
+ if (!result.errorMessage.empty()) {
|
|
|
+ std::cout << "[DEBUG] Error message: " << result.errorMessage << std::endl;
|
|
|
+ }
|
|
|
+
|
|
|
// Persist to disk
|
|
|
saveJobToFile(activeJobs[request.id]);
|
|
|
}
|
|
|
@@ -301,7 +320,11 @@ public:
|
|
|
auto startTime = userData ? *static_cast<std::chrono::steady_clock::time_point*>(userData) : std::chrono::steady_clock::now();
|
|
|
auto currentTime = std::chrono::steady_clock::now();
|
|
|
uint64_t timeElapsed = std::chrono::duration_cast<std::chrono::milliseconds>(currentTime - startTime).count();
|
|
|
- updateJobProgress(jobId, step, totalSteps, progress, timeElapsed);
|
|
|
+
|
|
|
+ // FIX: Convert progress from decimal fraction (0.0-1.0) to percentage (0-100)
|
|
|
+ float progressPercentage = progress * 100.0f;
|
|
|
+
|
|
|
+ updateJobProgress(jobId, step, totalSteps, progressPercentage, timeElapsed);
|
|
|
};
|
|
|
|
|
|
// Store start time to pass as user data
|
|
|
@@ -400,9 +423,20 @@ public:
|
|
|
}
|
|
|
|
|
|
// Save generated images to files
|
|
|
+ std::cout << "[TIMING_ANALYSIS] Job " << request.id << " - Starting post-processing (image saving) phase" << std::endl;
|
|
|
+ auto postProcessingStart = std::chrono::steady_clock::now();
|
|
|
+
|
|
|
for (size_t i = 0; i < generatedImages.size(); i++) {
|
|
|
const auto& image = generatedImages[i];
|
|
|
+ std::cout << "[TIMING_ANALYSIS] Job " << request.id << " - Saving image " << (i+1) << "/" << generatedImages.size() << std::endl;
|
|
|
+ auto imageSaveStart = std::chrono::steady_clock::now();
|
|
|
+
|
|
|
std::string imagePath = saveImageToFile(image, request.id, i);
|
|
|
+
|
|
|
+ auto imageSaveEnd = std::chrono::steady_clock::now();
|
|
|
+ auto imageSaveTime = std::chrono::duration_cast<std::chrono::milliseconds>(imageSaveEnd - imageSaveStart).count();
|
|
|
+ std::cout << "[TIMING_ANALYSIS] Job " << request.id << " - Image " << (i+1) << " save took " << imageSaveTime << "ms" << std::endl;
|
|
|
+
|
|
|
if (!imagePath.empty()) {
|
|
|
result.imagePaths.push_back(imagePath);
|
|
|
} else {
|
|
|
@@ -410,6 +444,10 @@ public:
|
|
|
return result;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ auto postProcessingEnd = std::chrono::steady_clock::now();
|
|
|
+ auto postProcessingTime = std::chrono::duration_cast<std::chrono::milliseconds>(postProcessingEnd - postProcessingStart).count();
|
|
|
+ std::cout << "[TIMING_ANALYSIS] Job " << request.id << " - Post-processing completed in " << postProcessingTime << "ms" << std::endl;
|
|
|
|
|
|
result.success = true;
|
|
|
result.generationTime = generatedImages.empty() ? 0 : generatedImages[0].generationTime;
|