NS_INTERFACE_MAP_END //***************************************************************************** // nsSHistory: nsISHistory //***************************************************************************** // static PRUint32 nsSHistory::CalcMaxTotalViewers() { // Calculate an estimate of how many ContentViewers we should cache based // on RAM. This assumes that the average ContentViewer is 4MB (conservative) // and caps the max at 8 ContentViewers // // TODO: Should we split the cache memory betw. ContentViewer caching and // nsCacheService? // // RAM ContentViewers // ----------------------- // 32 Mb 0 // 64 Mb 1 // 128 Mb 2 // 256 Mb 3 // 512 Mb 5 // 1024 Mb 8 // 2048 Mb 8 // 4096 Mb 8 PRUint64 bytes = PR_GetPhysicalMemorySize(); if (LL_IS_ZERO(bytes)) return 0; // Conversion from unsigned int64 to double doesn't work on all platforms. // We need to truncate the value at LL_MAXINT to make sure we don't // overflow. if (LL_CMP(bytes, >, LL_MAXINT)) bytes = LL_MAXINT; PRUint64 kbytes; LL_SHR(kbytes, bytes, 10); double kBytesD; LL_L2D(kBytesD, (PRInt64) kbytes); // This is essentially the same calculation as for nsCacheService, // except that we divide the final memory calculation by 4, since // we assume each ContentViewer takes on average 4MB PRUint32 viewers = 0; double x = log(kBytesD)/log(2.0) - 14; if (x > 0) { viewers = (PRUint32)(x * x - x + 2.001); // add .001 for rounding viewers /= 4; } // Cap it off at 8 max if (viewers > 8) { viewers = 8; } return viewers; }
static VALUE RubyFrom64BitInt(PRUint64 aNative) { PRUint64 lo64, hi64; LL_L2UI(lo64, aNative); LL_SHR(hi64, aNative, 32); { VALUE lo = UINT2NUM(lo64); VALUE hi = UINT2NUM(hi64); VALUE hiRuby = rb_funcall(hi, id_lshift, 1, INT2FIX(32)); return rb_funcall(hiRuby, id_plus, 1, lo); } }
PR_IMPLEMENT(PRUint64) PR_htonll(PRUint64 n) { #ifdef IS_BIG_ENDIAN return n; #else PRUint64 tmp; PRUint32 hi, lo; LL_L2UI(lo, n); LL_SHR(tmp, n, 32); LL_L2UI(hi, tmp); hi = htonl(hi); lo = htonl(lo); LL_UI2L(n, lo); LL_SHL(n, n, 32); LL_UI2L(tmp, hi); LL_ADD(n, n, tmp); return n; #endif } /* htonll */