shader_notify.cpp 1.0 KB

123456789101112131415161718192021222324252627282930313233343536
  1. // Copyright 2020 yuzu Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include <atomic>
  5. #include <chrono>
  6. #include <optional>
  7. #include "video_core/shader_notify.h"
  8. using namespace std::chrono_literals;
  9. namespace VideoCore {
  10. const auto TIME_TO_STOP_REPORTING = 2s;
  11. int ShaderNotify::ShadersBuilding() noexcept {
  12. const int now_complete = num_complete.load(std::memory_order::relaxed);
  13. const int now_building = num_building.load(std::memory_order::relaxed);
  14. if (now_complete == now_building) {
  15. const auto now = std::chrono::high_resolution_clock::now();
  16. if (completed && num_complete == num_when_completed) {
  17. if (now - complete_time > TIME_TO_STOP_REPORTING) {
  18. report_base = now_complete;
  19. completed = false;
  20. }
  21. } else {
  22. completed = true;
  23. num_when_completed = num_complete;
  24. complete_time = now;
  25. }
  26. }
  27. return now_building - report_base;
  28. }
  29. } // namespace VideoCore