| 387 | } |
| 388 | |
| 389 | int64_t GraphCapacityController::select_capacity_for_run( |
| 390 | const IGraphCapacityAdapter & adapter, |
| 391 | int64_t request_size) const { |
| 392 | if (request_size <= 0) { |
| 393 | throw std::runtime_error("graph capacity request size must be positive"); |
| 394 | } |
| 395 | const auto prepared_capacities = sorted_prepared_capacities(adapter); |
| 396 | switch (mode_) { |
| 397 | case GraphCapacityMode::Fixed: { |
| 398 | const int64_t capacity = adapter.fixed_capacity(); |
| 399 | if (capacity <= 0) { |
| 400 | throw std::runtime_error("fixed graph capacity must be positive"); |
| 401 | } |
| 402 | if (request_size > capacity) { |
| 403 | throw std::runtime_error("request exceeds fixed graph capacity"); |
| 404 | } |
| 405 | return capacity; |
| 406 | } |
| 407 | case GraphCapacityMode::Tiered: { |
| 408 | const int64_t prepared_capacity = select_smallest_prepared_fitting_capacity(prepared_capacities, request_size); |
| 409 | if (prepared_capacity > 0) { |
| 410 | return prepared_capacity; |
| 411 | } |
| 412 | return adapter.canonical_capacity_for_request(request_size); |
| 413 | } |
| 414 | case GraphCapacityMode::Grow: |
| 415 | if (!prepared_capacities.empty() && prepared_capacities.back() >= request_size) { |
| 416 | return prepared_capacities.back(); |
| 417 | } |
| 418 | return adapter.canonical_capacity_for_request(request_size); |
| 419 | case GraphCapacityMode::Double: |
| 420 | if (!prepared_capacities.empty() && prepared_capacities.back() >= request_size) { |
| 421 | return prepared_capacities.back(); |
| 422 | } |
| 423 | return adapter.canonical_capacity_for_request(checked_double_capacity_request(request_size)); |
| 424 | case GraphCapacityMode::Unsupported: |
| 425 | throw std::runtime_error("graph capacity mode is unsupported"); |
| 426 | } |
| 427 | throw std::runtime_error("unknown graph capacity mode"); |
| 428 | } |
| 429 | |
| 430 | SessionPreparationRequest build_preparation_request(const AudioBuffer & audio) { |
| 431 | SessionPreparationRequest request; |
no test coverage detected