Logically, there is a separate Report Cache and History Cache.
The Report Cache holds the data for reports and accessed during report request/execution. If a valid cache exists for a report at the time it is requested, then this will be retrieved:

If no valid cache exists in the Report Cache for the report being requested, then that report will be executed, as well as a cache entry created for it.
The History Cache holds the data for history list messages and is accessed when a history list message is opened. If the user sends a report to the History List after its execution, then a cache entry will be created for the report in the History Cache:
