static void LogFPSToFile(unsigned long val) { if (!s_bench_file.IsOpen()) s_bench_file.Open(File::GetUserPath(D_LOGS_IDX) + "fps.txt", "w"); char buffer[256]; snprintf(buffer, 256, "%ld\n", val); s_bench_file.WriteArray(buffer, strlen(buffer)); }
bool FifoDataFile::Save(const std::string& filename) { File::IOFile file; if (!file.Open(filename, "wb")) return false; // Add space for header PadFile(sizeof(FileHeader), file); // Add space for frame list u64 frameListOffset = file.Tell(); PadFile(m_Frames.size() * sizeof(FileFrameInfo), file); u64 bpMemOffset = file.Tell(); file.WriteArray(m_BPMem, BP_MEM_SIZE); u64 cpMemOffset = file.Tell(); file.WriteArray(m_CPMem, CP_MEM_SIZE); u64 xfMemOffset = file.Tell(); file.WriteArray(m_XFMem, XF_MEM_SIZE); u64 xfRegsOffset = file.Tell(); file.WriteArray(m_XFRegs, XF_REGS_SIZE); u64 texMemOffset = file.Tell(); file.WriteArray(m_TexMem, TEX_MEM_SIZE); // Write header FileHeader header; header.fileId = FILE_ID; header.file_version = VERSION_NUMBER; header.min_loader_version = MIN_LOADER_VERSION; header.bpMemOffset = bpMemOffset; header.bpMemSize = BP_MEM_SIZE; header.cpMemOffset = cpMemOffset; header.cpMemSize = CP_MEM_SIZE; header.xfMemOffset = xfMemOffset; header.xfMemSize = XF_MEM_SIZE; header.xfRegsOffset = xfRegsOffset; header.xfRegsSize = XF_REGS_SIZE; header.texMemOffset = texMemOffset; header.texMemSize = TEX_MEM_SIZE; header.frameListOffset = frameListOffset; header.frameCount = (u32)m_Frames.size(); header.flags = m_Flags; file.Seek(0, SEEK_SET); file.WriteBytes(&header, sizeof(FileHeader)); // Write frames list for (unsigned int i = 0; i < m_Frames.size(); ++i) { const FifoFrameInfo& srcFrame = m_Frames[i]; // Write FIFO data file.Seek(0, SEEK_END); u64 dataOffset = file.Tell(); file.WriteBytes(srcFrame.fifoData.data(), srcFrame.fifoData.size()); u64 memoryUpdatesOffset = WriteMemoryUpdates(srcFrame.memoryUpdates, file); FileFrameInfo dstFrame; dstFrame.fifoDataSize = static_cast<u32>(srcFrame.fifoData.size()); dstFrame.fifoDataOffset = dataOffset; dstFrame.fifoStart = srcFrame.fifoStart; dstFrame.fifoEnd = srcFrame.fifoEnd; dstFrame.memoryUpdatesOffset = memoryUpdatesOffset; dstFrame.numMemoryUpdates = static_cast<u32>(srcFrame.memoryUpdates.size()); // Write frame info u64 frameOffset = frameListOffset + (i * sizeof(FileFrameInfo)); file.Seek(frameOffset, SEEK_SET); file.WriteBytes(&dstFrame, sizeof(FileFrameInfo)); } if (!file.Close()) return false; return true; }