| #include <stdlib.h> |
| #define CANVAS_PATH "CANVAS_PATH" |
| |
| class SkFile { |
| FILE* file; |
| bool busted; |
| char* sz; |
| mutable int i; |
| |
| public: |
| SkFile(unsigned long id) { |
| file = NULL; |
| busted = false; |
| sz = new char[100000]; |
| set(id); |
| i = 100; |
| } |
| |
| ~SkFile() { |
| delete sz; |
| if (file) { |
| fclose(file); |
| } |
| } |
| |
| void set(unsigned long id) { |
| if (busted) { |
| return; |
| } |
| |
| if (file == NULL) { |
| char sz[10000]; |
| sprintf(sz, "%s\\%ul.callstacks.txt", getenv(CANVAS_PATH), id); |
| file = fopen(sz, "a"); |
| if (file == NULL) { |
| busted = true; |
| } |
| fprintf(file, "\n\n\nNEW SESSION, just coliding ids ... should generate a new file ideally ... \n\n\n"); |
| } |
| } |
| |
| void appendLine(const char* sz) const { |
| if (busted) { |
| return; |
| } |
| |
| fprintf(file, "%s\n", sz); |
| } |
| |
| void dump(bool flush = false) const { |
| if (busted) { |
| return; |
| } |
| |
| LightSymbol::GetCallStack(sz, 100000, " >- "); |
| appendLine(sz); |
| |
| i--; |
| |
| if (i < 0 || flush) { |
| i = 100; |
| fflush(file); |
| } |
| } |
| }; |