diff --git a/rEFIt_UEFI/Platform/Utils.cpp b/rEFIt_UEFI/Platform/Utils.cpp index 38d77baa9..5186c7d39 100755 --- a/rEFIt_UEFI/Platform/Utils.cpp +++ b/rEFIt_UEFI/Platform/Utils.cpp @@ -142,6 +142,19 @@ UINT32 GetCrc32(UINT8 *Buffer, UINTN Size) return x; } +extern "C" { +#include +} + +void displayFreeMemory(const XString8& prefix) +{ + UINTN LowMemory; + UINTN TotalMemory; + + TotalMemory = OcCountFreePages (&LowMemory); + DebugLog(1, "--> %s: Firmware has %llu free pages (%llu in lower 4 GB)\n", prefix.c_str(), TotalMemory, LowMemory); +} + XBool haveError = false; diff --git a/rEFIt_UEFI/Platform/Utils.h b/rEFIt_UEFI/Platform/Utils.h index ac9dc979a..0b36a25ae 100755 --- a/rEFIt_UEFI/Platform/Utils.h +++ b/rEFIt_UEFI/Platform/Utils.h @@ -125,10 +125,14 @@ UINT32 GetCrc32(UINT8 *Buffer, UINTN Size); - extern XBool haveError; #endif // __cplusplus + +extern "C" { +void displayFreeMemory(const XString8& prefix); +} + #endif // _UTILS_H_ diff --git a/rEFIt_UEFI/PlatformEFI/cpp_util/globals_ctor.cpp b/rEFIt_UEFI/PlatformEFI/cpp_util/globals_ctor.cpp index b18687c14..3afbb4f19 100755 --- a/rEFIt_UEFI/PlatformEFI/cpp_util/globals_ctor.cpp +++ b/rEFIt_UEFI/PlatformEFI/cpp_util/globals_ctor.cpp @@ -64,7 +64,7 @@ void construct_globals_objects(EFI_HANDLE ImageHandle) ctor_ptr* currentCtor = (ctor_ptr*) (((UINTN) (LoadedImage->ImageBase)) + SectionHeader->PointerToRawData); ctor_ptr* ctorEnd = (ctor_ptr*) (((UINTN) (LoadedImage->ImageBase)) + SectionHeader->PointerToRawData + SectionHeader->Misc.VirtualSize); DBG("currentBegin %llX, ctorEnd %llX, %lld ctors to call\n", (UINTN)(currentCtor), (UINTN)(ctorEnd), (UINTN)(ctorEnd-currentCtor)); - size_t i = 0; + size_t i = 0; (void)i; // avoid warning if DBG is an empty macro while (currentCtor < ctorEnd) { DBG("[%03zu] &ctor %08llX, will call %08llX\n", i, (UINTN)(currentCtor), (UINTN)(*currentCtor)); diff --git a/rEFIt_UEFI/PlatformEFI/cpp_util/operatorNewDelete.cpp b/rEFIt_UEFI/PlatformEFI/cpp_util/operatorNewDelete.cpp index 99a580e81..daf9a1029 100755 --- a/rEFIt_UEFI/PlatformEFI/cpp_util/operatorNewDelete.cpp +++ b/rEFIt_UEFI/PlatformEFI/cpp_util/operatorNewDelete.cpp @@ -17,6 +17,7 @@ void* operator new(unsigned long count) DebugLog(2, "AllocatePool(%lu) returned NULL. Cpu halted\n", count); CpuDeadLoop(); } +// MemLogf(false, 0, "operator new(%lu) %llx\n", count, uintptr_t(ptr)); return ptr; } @@ -31,14 +32,22 @@ void* operator new[](unsigned long count) DebugLog(2, "AllocatePool(%lu) returned NULL. Cpu halted\n", count); CpuDeadLoop(); } +// MemLogf(false, 0, "operator new[](%lu) %llx\n", count, uintptr_t(ptr)); return ptr; } +uint64_t operator_delete_count1 = 0; +uint64_t operator_delete_count2 = 0; +uint64_t operator_delete_count3 = 0; + + #ifdef _MSC_VER #pragma warning(disable : 4577) #endif void operator delete ( void* ptr ) noexcept { +// ++operator_delete_count1; +// MemLogf(false, 0, "operator delete(%llx) %lld\n", uintptr_t(ptr), operator_delete_count1); return FreePool(ptr); } @@ -48,6 +57,8 @@ void _cdecl operator delete (void * ptr, unsigned __int64 count) void operator delete (void * ptr, UINTN count) #endif { +// ++operator_delete_count2; +// MemLogf(false, 0, "operator delete(%llx, %lld) %lld\n", uintptr_t(ptr), count, operator_delete_count2); return FreePool(ptr); } @@ -58,6 +69,8 @@ void _cdecl operator delete[](void * ptr, unsigned __int64 count) void operator delete[](void * ptr, UINTN count) #endif { +// ++operator_delete_count3; +// MemLogf(false, 0, "operator delete[](%llx, %lld) %lld\n", uintptr_t(ptr), count, operator_delete_count3); return FreePool(ptr); } diff --git a/rEFIt_UEFI/PlatformEFI/posix/posix_additions.cpp b/rEFIt_UEFI/PlatformEFI/posix/posix_additions.cpp index ee9b2c27d..54b4746e6 100644 --- a/rEFIt_UEFI/PlatformEFI/posix/posix_additions.cpp +++ b/rEFIt_UEFI/PlatformEFI/posix/posix_additions.cpp @@ -34,8 +34,8 @@ const char* efiStrError(EFI_STATUS Status) { size_t size = stdio_static_buf.allocatedSize(); UINTN n = 0; - n = AsciiSPrint(stdio_static_buf.dataSized(size), size, "%r", Status); - while ( n > size - 2 ) + n = AsciiSPrint(stdio_static_buf.dataSized(size-1), size-1, "%r", Status); // dataSized(size)-1 is important to avoid stdio_static_buf grow by 1 at each call. + while ( n > size - 3 ) { size += 10; n = AsciiSPrint(stdio_static_buf.dataSized(size), size, "%r", Status); diff --git a/rEFIt_UEFI/PlatformEFI/posix/stdlib.h b/rEFIt_UEFI/PlatformEFI/posix/stdlib.h index 96aa51e42..d23afef06 100644 --- a/rEFIt_UEFI/PlatformEFI/posix/stdlib.h +++ b/rEFIt_UEFI/PlatformEFI/posix/stdlib.h @@ -6,6 +6,7 @@ extern "C" { #endif #include +#include #ifdef __cplusplus } @@ -21,16 +22,21 @@ void abort(void); inline void* malloc(size_t size) { - return AllocatePool(size); + void* ptr = AllocatePool(size); +// MemLogf(false, 0, "malloc(%zd) %llx\n", size, uintptr_t(ptr)); + return ptr; } inline void* reallocWithOldSize(void *ptr, size_t newsize, size_t oldsize) // not the posix realloc. For EFI we need oldsize { - return ReallocatePool(oldsize, newsize, ptr); + void* newptr = ReallocatePool(oldsize, newsize, ptr); +// MemLogf(false, 0, "reallocWithOldSize(%llx %zd %zd) %llx\n", uintptr_t(ptr), newsize, oldsize, uintptr_t(newptr)); + return newptr; } inline void free(void *ptr) { +// MemLogf(false, 0, "free(%llx)\n", uintptr_t(ptr)); FreePool(ptr); } diff --git a/rEFIt_UEFI/Settings/ConfigManager.cpp b/rEFIt_UEFI/Settings/ConfigManager.cpp index a12535ff3..f73533faf 100644 --- a/rEFIt_UEFI/Settings/ConfigManager.cpp +++ b/rEFIt_UEFI/Settings/ConfigManager.cpp @@ -555,9 +555,9 @@ EFI_STATUS LoadPlist(const XStringW& ConfName, C* plist) } else { } - +#ifndef JIEF_DEBUG if ( !parsingOk || xmlLiteParser.getXmlParserMessageArray().size() - xmlLiteParser.getXmlParserInfoMessageCount() > 0 ) gBS->Stall(3000000); // 3 seconds delay - +#endif return Status; } diff --git a/rEFIt_UEFI/libeg/VectorGraphics.cpp b/rEFIt_UEFI/libeg/VectorGraphics.cpp index a88eb9676..a8abf3eb9 100755 --- a/rEFIt_UEFI/libeg/VectorGraphics.cpp +++ b/rEFIt_UEFI/libeg/VectorGraphics.cpp @@ -81,7 +81,7 @@ EFI_STATUS XTheme::ParseSVGXIcon(INTN Id, const XString8& IconNameX, OUT XImage* strncpy(IconImage->id, group->id, 63); break; } - group = group->next; + group = group->parent; } if (group) { //the shape is in the group // keep this sample for debug purpose @@ -105,7 +105,7 @@ EFI_STATUS XTheme::ParseSVGXIcon(INTN Id, const XString8& IconNameX, OUT XImage* //there is bounds after nsvgParse() IconImage->width = shape->bounds[2] - shape->bounds[0]; IconImage->height = shape->bounds[3] - shape->bounds[1]; - // DBG("parsed bounds: %f, %f\n", IconImage->width, IconImage->height); + DBG("parsed bounds: %f, %f\n", IconImage->width, IconImage->height); if ( IconImage->height < 1.f ) { IconImage->height = 200.f; } @@ -227,8 +227,8 @@ if ( nsvg__nbDanglingPtr() > 0 ) { SVGParser = nsvgParse(buffer2, 72, 1.f); //the buffer will be modified, it is how nanosvg works // Jief : NEVER cast const to not const. Just change the parameter to not const !!! Nothing better to deceive. // nsvg__deleteParser(SVGParser); if ( nsvg__nbDanglingPtr() > 0 ) { - nsvg__outputDanglingPtr(); - nvsg__memoryallocation_verbose = true; // there leaks. Activate verbose +// nsvg__outputDanglingPtr(); +// nvsg__memoryallocation_verbose = true; // there leaks. Activate verbose }else{ nvsg__memoryallocation_verbose = false; // be sure that nvsg__memoryallocation_verbose is false, as it seems there is no memory leaks } diff --git a/rEFIt_UEFI/libeg/XTheme.cpp b/rEFIt_UEFI/libeg/XTheme.cpp index 07dc310c8..3cf69e400 100644 --- a/rEFIt_UEFI/libeg/XTheme.cpp +++ b/rEFIt_UEFI/libeg/XTheme.cpp @@ -513,7 +513,7 @@ XTheme::GetThemeTagSettings(const TagDict* DictPointer) BadgeOffsetY = GetPropertyAsInteger(Prop, BadgeOffsetY); Prop = Dict->propertyForKey("Scale"); - ThemeX->BadgeScale = GetPropertyAsInteger(Prop, BadgeScale); + BadgeScale = GetPropertyAsInteger(Prop, BadgeScale); } Dict = DictPointer->dictPropertyForKey("Origination"); diff --git a/rEFIt_UEFI/libeg/nanosvg.cpp b/rEFIt_UEFI/libeg/nanosvg.cpp index 88b45054d..d03770df4 100755 --- a/rEFIt_UEFI/libeg/nanosvg.cpp +++ b/rEFIt_UEFI/libeg/nanosvg.cpp @@ -735,7 +735,7 @@ void nsvg__deleteParser(NSVGparser* p) if (p != NULL) { nsvg__deleteStyles(p->styles); nsvg__deleteSymbols(p->symbols); - nsvg__deletePaths(p->plist); + nsvg__deletePaths(p->pathList); nsvg__deleteGradientData(p->gradients); // do not delete font here, as we free all fonts later by following fontsdb @@ -750,12 +750,12 @@ void nsvg__deleteParser(NSVGparser* p) attr->fontFace = NULL; } while (attr->group) { - NSVGgroup* group = attr->group->next; + NSVGgroup* group = attr->group->parent; nsvg__delete(attr->group, "nsvg__deleteParser3"_XS8); attr->group = group; } } - FreePool(p); + nsvg__delete(p, "nsvg__deleteParser4"_XS8); } } @@ -1098,7 +1098,7 @@ static void nsvg__addShape(NSVGparser* p) NSVGshape* shape; // int i; - if (p->plist == NULL /*&& !p->isText*/ ) + if (p->pathList == NULL /*&& !p->isText*/ ) return; shape = (NSVGshape*)nsvg__alloczero(sizeof(NSVGshape), S8Printf("nsvg__addShape %s", attr->id)); @@ -1121,8 +1121,8 @@ static void nsvg__addShape(NSVGparser* p) shape->opacity = attr->opacity; memcpy(shape->xform, attr->xform, sizeof(float)*6); - shape->paths = p->plist; - p->plist = NULL; + shape->paths = p->pathList; + p->pathList = NULL; shape->clip.count = attr->clipPathCount; // if (shape->clip.count > 0) { @@ -1273,8 +1273,8 @@ static void nsvg__addPath(NSVGparser* p, char closed, const char* fromWhere) path->bounds[3] = nsvg__maxf(path->bounds[3], bounds[3]); } } - path->next = p->plist; - p->plist = path; + path->next = p->pathList; + p->pathList = path; return; } @@ -3191,7 +3191,7 @@ static void nsvg__parseText(NSVGparser* p, char** dict) // DBG("set help_night->font=%s color=%X size=%f as in HelpRows\n", fontSVG->fontFamily, text->fontColor, text->fontSize); break; } - group = group->next; + group = group->parent; } } @@ -3663,7 +3663,6 @@ static void nsvg__parseSymbol(NSVGparser* p, char** dict) static void nsvg__parseGroup(NSVGparser* p, char** dict) { - NSVGgroup* group; NSVGattrib* oldAttr = nsvg__getAttr(p); nsvg__pushAttr(p); NSVGattrib* curAttr = nsvg__getAttr(p); @@ -3673,7 +3672,7 @@ static void nsvg__parseGroup(NSVGparser* p, char** dict) return; } // DBG("parse group\n"); - group = (NSVGgroup*)nsvg__alloczero(sizeof(NSVGgroup), "nsvg__parseGroup"_XS8); + NSVGgroup* group = (NSVGgroup*)nsvg__alloczero(sizeof(NSVGgroup), "nsvg__parseGroup"_XS8); // if (curAttr->id[0] == '\0') //skip anonymous groups // return; @@ -3691,13 +3690,13 @@ static void nsvg__parseGroup(NSVGparser* p, char** dict) // DBG("parsed groupID=%s\n", group->id); if (oldAttr != NULL) { - group->next = oldAttr->group; + group->parent = oldAttr->group; } curAttr->group = group; if (!visSet) { - if (group->next != NULL) { - group->visibility = group->next->visibility; + if (group->parent != NULL) { + group->visibility = group->parent->visibility; } else { group->visibility = NSVG_VIS_VISIBLE; } @@ -3968,7 +3967,7 @@ static void nsvg__parseGlyph(NSVGparser* p, char** dict, XBool missing) return; } - p->plist = NULL; + p->pathList = NULL; glyph = (NSVGglyph*)nsvg__alloczero(sizeof(NSVGglyph), "nsvg__parseGlyph"_XS8); if (!glyph) { @@ -3993,8 +3992,8 @@ static void nsvg__parseGlyph(NSVGparser* p, char** dict, XBool missing) } nsvg__parsePath(p, dict); - glyph->path = p->plist; // plist means PathList ;) - p->plist = 0; //lastPath; + glyph->path = p->pathList; + p->pathList = 0; //lastPath; if (p->font) { if (missing) { @@ -4617,7 +4616,7 @@ void nsvg__deleteClipPaths(NSVGclipPath* path) while (path != NULL) { pnext = path->next; nsvg__deleteShapes(path->shapes); - FreePool(path); + nsvg__delete(path, "nsvg__deleteClipPaths"_XS8); path = pnext; } } @@ -4630,7 +4629,7 @@ void nsvgDelete(NSVGimage* image) nsvg__deleteClipPaths(image->clipPaths); group = image->groups; while (group != NULL) { - gnext = group->next; + gnext = group->parent; nsvg__delete(group, "nsvgDelete group"_XS8); group = gnext; } diff --git a/rEFIt_UEFI/libeg/nanosvg.h b/rEFIt_UEFI/libeg/nanosvg.h index 43056851f..b1c26a2cf 100644 --- a/rEFIt_UEFI/libeg/nanosvg.h +++ b/rEFIt_UEFI/libeg/nanosvg.h @@ -164,9 +164,7 @@ typedef struct NSVGpattern { typedef struct NSVGgroup { char id[kMaxIDLength]; - struct NSVGgroup* parent; // Pointer to parent group or NULL - struct NSVGgroup* next; // Pointer to next group or NULL -// struct NSVGshape* xshapeList; // list of shapes inside the group + struct NSVGgroup* parent; // Pointer to next group or NULL int visibility; } NSVGgroup; @@ -413,7 +411,7 @@ typedef struct NSVGparser float* pts; int npts; int cpts; - NSVGpath* plist; + NSVGpath* pathList; NSVGimage* image; NSVGstyles* styles; NSVGgradientData* gradients; @@ -458,7 +456,6 @@ void* nsvg__realloc(UINTN oldsize, UINTN newsize, void* ref, const XString8& msg void nsvg__delete(void* buffer, const XString8& msg); size_t nsvg__nbDanglingPtr(); void nsvg__outputDanglingPtr(); - #endif bool isShapeInGroup(NSVGshape* shape, const char* groupName); diff --git a/rEFIt_UEFI/libeg/nanosvgrast.cpp b/rEFIt_UEFI/libeg/nanosvgrast.cpp index 866db538a..5fd58e33c 100644 --- a/rEFIt_UEFI/libeg/nanosvgrast.cpp +++ b/rEFIt_UEFI/libeg/nanosvgrast.cpp @@ -50,6 +50,7 @@ #define DBG(...) #else #define DBG(...) DebugLog(DEBUG_SVG, __VA_ARGS__) +//#define DEBUG_TRACE #endif @@ -253,6 +254,9 @@ static void nsvg__addPathPoint(NSVGrasterizer* r, NSVGpoint* pt, float* t, int f static void nsvg__appendPathPoint(NSVGrasterizer* r, NSVGpoint* pt) { +#ifdef DEBUG_TRACE + DBG("nsvg__appendPathPoint\n"); +#endif if (r->npoints+1 > r->cpoints) { int OldSize = r->cpoints * sizeof(NSVGpoint); r->cpoints = r->cpoints > 0 ? r->cpoints * 2 : 64; @@ -268,6 +272,9 @@ static void nsvg__appendPathPoint(NSVGrasterizer* r, NSVGpoint* pt) static void nsvg__duplicatePoints(NSVGrasterizer* r) { +#ifdef DEBUG_TRACE + DBG("nsvg__duplicatePoints\n"); +#endif if (r->npoints > r->cpoints2) { int OldSize = r->cpoints2 * sizeof(NSVGpoint); r->cpoints2 = r->npoints; @@ -287,6 +294,9 @@ static void nsvg__duplicatePoints(NSVGrasterizer* r) static void nsvg__addEdge(NSVGrasterizer* r, float x0, float y0, float x1, float y1) { +#ifdef DEBUG_TRACE + DBG("nsvg__addEdge\n"); +#endif NSVGedge* e; // Skip horizontal edges @@ -352,6 +362,9 @@ static float nsvg__controlPathLength(float x1, float y1, float x2, float y2, flo static void nsvg__flattenCubicBez2(NSVGrasterizer* r, float* x, float* t, int type) { +#ifdef DEBUG_TRACE + DBG("nsvg__flattenCubicBez2\n"); +#endif float ax, ay, bx, by, cx, cy, dx, dy; float x1, y1, x2, y2, x3, y3, x4, y4; // float pointX, pointY; @@ -435,6 +448,9 @@ static void nsvg__flattenCubicBez2(NSVGrasterizer* r, float* x, float* t, int ty static void nsvg__flattenShape(NSVGrasterizer* r, NSVGshape* shape, float* xform) { +#ifdef DEBUG_TRACE + DBG("nsvg__flattenShape\n"); +#endif int i, j; NSVGpath* path; NSVGpoint pt; @@ -500,6 +516,9 @@ static void nsvg__buttCap(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right, static void nsvg__squareCap(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right, NSVGpoint* p, float dx, float dy, float lineWidth, int connect) { +#ifdef DEBUG_TRACE + DBG("nsvg__squareCap\n"); +#endif float w = lineWidth * 0.5f; float px = p->x - dx*w, py = p->y - dy*w; float dlx = dy, dly = -dx; @@ -522,6 +541,9 @@ static void nsvg__squareCap(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right static void nsvg__roundCap(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right, NSVGpoint* p, float dx, float dy, float lineWidth, int ncap, int connect) { +#ifdef DEBUG_TRACE + DBG("nsvg__roundCap\n"); +#endif float w = lineWidth * 0.5f; float px = p->x, py = p->y; @@ -558,6 +580,9 @@ static void nsvg__roundCap(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right, static void nsvg__bevelJoin(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right, NSVGpoint* p0, NSVGpoint* p1, float lineWidth) { +#ifdef DEBUG_TRACE + DBG("nsvg__bevelJoin\n"); +#endif float w = lineWidth * 0.5f; float dlx0 = p0->dy, dly0 = -p0->dx; float dlx1 = p1->dy, dly1 = -p1->dx; @@ -578,6 +603,9 @@ static void nsvg__bevelJoin(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right static void nsvg__miterJoin(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right, NSVGpoint* p0, NSVGpoint* p1, float lineWidth) { +#ifdef DEBUG_TRACE + DBG("nsvg__miterJoin\n"); +#endif float w = lineWidth * 0.5f; float dlx0 = p0->dy, dly0 = -p0->dx; float dlx1 = p1->dy, dly1 = -p1->dx; @@ -614,6 +642,9 @@ static void nsvg__miterJoin(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right static void nsvg__roundJoin(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right, NSVGpoint* p0, NSVGpoint* p1, float lineWidth, int ncap) { +#ifdef DEBUG_TRACE + DBG("nsvg__roundJoin\n"); +#endif int n; float w = lineWidth * 0.5f; float dlx0 = p0->dy, dly0 = -p0->dx; @@ -676,6 +707,9 @@ static int nsvg__curveDivs(float r, float arc, float tol) static void nsvg__expandStroke(NSVGrasterizer* r, NSVGpoint* points, int npoints, int closed, int lineJoin, int lineCap, float lineWidth) { +#ifdef DEBUG_TRACE + DBG("nsvg__expandStroke\n"); +#endif int ncap = nsvg__curveDivs(lineWidth*0.5f, NSVG_PI, r->tessTol); // Calculate divisions per half circle. NSVGpoint left = {0,0,0,0,0,0,0,0,{0,0,0}}, right = {0,0,0,0,0,0,0,0,{0,0,0}}, firstLeft = {0,0,0,0,0,0,0,0,{0,0,0}}, firstRight = {0,0,0,0,0,0,0,0,{0,0,0}}; NSVGpoint* p0, *p1; @@ -747,6 +781,9 @@ static void nsvg__expandStroke(NSVGrasterizer* r, NSVGpoint* points, int npoints static void nsvg__prepareStroke(NSVGrasterizer* r, float miterLimit, int lineJoin) { +#ifdef DEBUG_TRACE + DBG("nsvg__prepareStroke\n"); +#endif NSVGpoint *p0, *p1; @@ -804,6 +841,9 @@ static void nsvg__prepareStroke(NSVGrasterizer* r, float miterLimit, int lineJoi static void nsvg__flattenShapeStroke(NSVGrasterizer* r, NSVGshape* shape, float* xform) { +#ifdef DEBUG_TRACE + DBG("nsvg__flattenShapeStroke\n"); +#endif int closed; NSVGpath* path; NSVGpoint* p0, *p1; @@ -1007,6 +1047,9 @@ static void nsvg__fillScanline(UINT8* scanline, int len, int x0, int x1, int max // are wrong, or if the user supplies a too-small bitmap static void nsvg__fillActiveEdges(UINT8* scanline, int len, NSVGactiveEdge* e, int maxWeight, int* xmin, int* xmax, char fillRule) { +#ifdef DEBUG_TRACE + DBG("nsvg__fillActiveEdges\n"); +#endif // non-zero winding fill int x0 = 0, w = 0; @@ -1080,6 +1123,9 @@ static void nsvg__scanlineBit( UINT8* row, int count, UINT8* cover, int x, int y, /* float tx, float ty, float scalex, float scaley, */ NSVGcachedPaint* cache) { +#ifdef DEBUG_TRACE + DBG("nsvg__scanlineBit\n"); +#endif //xxx where is security check that x/8 and (x+count)/8 is inside row[] index? // called by r->fscanline(&r->bitmap[y * r->stride], xmax-xmin+1, &r->scanline[xmin], xmin, y,/* tx,ty, scalex, scaley, */ cache); int x1 = x + count; @@ -1091,6 +1137,9 @@ static void nsvg__scanlineBit( static void nsvg__scanlineSolid(UINT8* row, int count, UINT8* cover, int x, int y, /* float tx, float ty, float scalex, float scaley, */ NSVGcachedPaint* cache) { +#ifdef DEBUG_TRACE + DBG("nsvg__scanlineSolid\n"); +#endif // static int once = 0; UINT8* dst = row + x*4; if (cache->type == NSVG_PAINT_COLOR) { @@ -1345,6 +1394,9 @@ static void nsvg__rasterizeSortedEdges(NSVGrasterizer *r, /* float tx, float ty, float scalex, float scaley, */ NSVGcachedPaint* cache, char fillRule, NSVGclip* clip) { +#ifdef DEBUG_TRACE + DBG("nsvg__rasterizeSortedEdges\n"); +#endif NSVGactiveEdge *active = NULL; int e = 0; @@ -1444,6 +1496,9 @@ static void nsvg__rasterizeSortedEdges(NSVGrasterizer *r, static void nsvg__unpremultiplyAlpha(UINT8* image, int w, int h, int stride) { +#ifdef DEBUG_TRACE + DBG("nsvg__unpremultiplyAlpha\n"); +#endif // Unpremultiply for (int y = 0; y < h; y++) { @@ -1503,6 +1558,9 @@ static void nsvg__unpremultiplyAlpha(UINT8* image, int w, int h, int stride) static void nsvg__initPaint(NSVGcachedPaint* cache, NSVGpaint* paint, NSVGshape* shape, float *xformShape) { +#ifdef DEBUG_TRACE + DBG("nsvg__initPaint\n"); +#endif NSVGgradient* grad = paint->paint.gradient; @@ -1591,6 +1649,9 @@ static void nsvg__rasterizeShapes(NSVGrasterizer* r, UINT8* dst, int w, int h, int stride, NSVGscanlineFunction fscanline) { +#ifdef DEBUG_TRACE + DBG("nsvg__rasterizeShapes %s %f %f %f %f\n", groupName ? groupName : "", tx, ty, scalex, scaley); +#endif NSVGshape *shape = NULL, *shapeLink = NULL; float xform[6], xform2[6]; float min_scale = fabsf(scalex) < fabsf(scaley) ? fabsf(scalex) : fabsf(scaley); @@ -1653,6 +1714,9 @@ static void nsvg__rasterizeShapes(NSVGrasterizer* r, static void renderShape(NSVGrasterizer* r, NSVGshape* shape, float *xform, float min_scale) { +#ifdef DEBUG_TRACE + DBG("render shape %s %f %f %f %f %f %f\n", shape->id, xform[0], xform[1], xform[2], xform[3], xform[4], xform[5]); +#endif NSVGedge *e = NULL; NSVGcachedPaint cache; diff --git a/rEFIt_UEFI/libeg/text.cpp b/rEFIt_UEFI/libeg/text.cpp index cc68db246..a36398714 100644 --- a/rEFIt_UEFI/libeg/text.cpp +++ b/rEFIt_UEFI/libeg/text.cpp @@ -121,7 +121,7 @@ void XTheme::LoadFontImage(IN XBool UseEmbedded, IN INTN Rows, IN INTN Cols) if (EFI_ERROR(Status)) { //then take from common font folder -// fontFilePath = SWPrintf(L"%s\\%s", commonFontDir, isKorean ? L"FontKorean.png" : ThemeX->FontFileName.data()); +// fontFilePath = SWPrintf(L"%s\\%s", commonFontDir, isKorean ? L"FontKorean.png" : FontFileName.data()); fontFilePath = commonFontDir + FontFileName; Status = NewImage.LoadXImage(&self.getCloverDir(), fontFilePath); //else use embedded even if it is not embedded @@ -162,8 +162,8 @@ void XTheme::LoadFontImage(IN XBool UseEmbedded, IN INTN Rows, IN INTN Cols) (PixelPtr->Red == FirstPixel.Red) ) { PixelPtr->Reserved = 0; //if a pixel has same color as first pixel then it will be transparent - //} else if (ThemeX->DarkEmbedded) { - } else if (ThemeX->embedded && !ThemeX->Daylight) { + //} else if (DarkEmbedded) { + } else if (embedded && !Daylight) { *PixelPtr = SemiWhitePixel; //special case to change a text to semi white, not blue pixels } FontPtr[Ypos + x] = *PixelPtr++; //not (x, YPos) !!! diff --git a/rEFIt_UEFI/refit/lib.cpp b/rEFIt_UEFI/refit/lib.cpp index 4ced09a96..2c2e7fb49 100644 --- a/rEFIt_UEFI/refit/lib.cpp +++ b/rEFIt_UEFI/refit/lib.cpp @@ -173,7 +173,7 @@ void UninitRefitLib(void) { // called before running external programs to close open file handles - ThemeX->closeThemeDir(); + //ThemeX->closeThemeDir(); selfOem.closeHandle(); self.closeHandle(); @@ -190,7 +190,7 @@ EFI_STATUS ReinitRefitLib(void) selfOem.reInitialize(); ReinitVolumes(); - ThemeX->openThemeDir(); + //ThemeX->openThemeDir(); return EFI_SUCCESS; } diff --git a/rEFIt_UEFI/refit/main.cpp b/rEFIt_UEFI/refit/main.cpp index 1edf5cb09..3da6b97ac 100644 --- a/rEFIt_UEFI/refit/main.cpp +++ b/rEFIt_UEFI/refit/main.cpp @@ -672,8 +672,11 @@ void LOADER_ENTRY::StartLoader() NSVGfont *font; // , *nextFont; DbgHeader("StartLoader"); - + DBG("Starting %ls\n", FileDevicePathToXStringW(DevicePath).wc_str()); + displayFreeMemory("LOADER_ENTRY::StartLoader()"_XS8); +// while ( OcCountFreePages(NULL) > 300000 && AllocatePages(100) ) /*DBG("Free memory : %lld\n", OcCountFreePages(NULL))*/; +// displayFreeMemory(); if (Settings.notEmpty()) { DBG(" Settings: %ls\n", Settings.wc_str()); @@ -2693,6 +2696,7 @@ RefitMain (IN EFI_HANDLE ImageHandle, MsgLog("Build id: %s\n", gBuildId.c_str()); if ( gBuildInfo ) DBG("Build with: [%s]\n", gBuildInfo); + displayFreeMemory(""_XS8); //dumping SETTING structure @@ -3087,7 +3091,9 @@ RefitMain (IN EFI_HANDLE ImageHandle, } gSettings.Boot.FastBoot = false; //Hmm... will never be here } - +#ifdef JIEF_DEBUG +MainMenu.TimeoutSeconds=60; +#endif AfterTool = false; gEvent = 0; //clear to cancel loop while (MainLoopRunning) { @@ -3100,6 +3106,7 @@ RefitMain (IN EFI_HANDLE ImageHandle, GlobalConfig.gThemeChanged = false; ThemeX->ClearScreen(); } +displayFreeMemory("Before RunMainMenu"_XS8); MenuExit = MainMenu.RunMainMenu(DefaultIndex, &ChosenEntry); } // DBG("exit from MainMenu %llu\n", MenuExit); //MENU_EXIT_ENTER=(1) MENU_EXIT_DETAILS=3