From: drh Date: Mon, 29 Aug 2011 02:49:41 +0000 (+0000) Subject: About a 1% overall performance improvement by using a macro to avoid X-Git-Tag: version-3.7.8~39^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2d36eb43a4df79803fa4c56f2e70dc455df9657f;p=thirdparty%2Fsqlite.git About a 1% overall performance improvement by using a macro to avoid no-op calls to sqlite3MemReleaseExternal(). FossilOrigin-Name: ff71d20a9ed129bd1785a3f7a777ce62098735b7 --- diff --git a/manifest b/manifest index ddba4d7170..9b75cb0bd1 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Small\sperformance\simprovement\sto\sOP_Column. -D 2011-08-29T02:16:18.855 +C About\sa\s1%\soverall\sperformance\simprovement\sby\susing\sa\smacro\sto\savoid\nno-op\scalls\sto\ssqlite3MemReleaseExternal(). +D 2011-08-29T02:49:41.731 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 8c930e7b493d59099ea1304bd0f2aed152eb3315 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -238,13 +238,13 @@ F src/update.c 74a6cfb34e9732c1e2a86278b229913b4b51eeec F src/utf.c c53eb7404b3eb5c1cbb5655c6a7a0e0ce6bd50f0 F src/util.c 06302ffd2b80408d4f6c7af71f7090e0cf8d8ff7 F src/vacuum.c 05513dca036a1e7848fe18d5ed1265ac0b32365e -F src/vdbe.c dc84628c47e76ffa5dd945afea1460815323ad91 +F src/vdbe.c 9165b35da939f4a66c7e68b0c6d3f017ca982cb1 F src/vdbe.h c1eeedacab6bcf1e7c2cf8203ba9763a616f9a86 -F src/vdbeInt.h f9250326f264ca5f100acc19e9c07096bb889096 +F src/vdbeInt.h 70767f6504aac4f0057ec2a55738470a890789ac F src/vdbeapi.c 11dc47987abacb76ad016dcf5abc0dc422482a98 F src/vdbeaux.c de1e4cab060a45df9ebee68dd63543d14559f0e7 F src/vdbeblob.c f024f0bf420f36b070143c32b15cc7287341ffd3 -F src/vdbemem.c 0498796b6ffbe45e32960d6a1f5adfb6e419883b +F src/vdbemem.c 5e6effb96dd53d233361cbfaa3f0a43b9af689e9 F src/vdbesort.c 8a61a6d731cbe612217edf9eece6197f37c9489e F src/vdbetrace.c 5d0dc3d5fd54878cc8d6d28eb41deb8d5885b114 F src/vtab.c 901791a47318c0562cd0c676a2c6ff1bc530e582 @@ -961,7 +961,7 @@ F tool/symbols.sh caaf6ccc7300fd43353318b44524853e222557d5 F tool/tostr.awk 11760e1b94a5d3dcd42378f3cc18544c06cfa576 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f F tool/warnings.sh b7fdb2cc525f5ef4fa43c80e771636dd3690f9d2 -P edff9d4a995095e555fcc9aec4c56f4bcaa1557e -R 2bdc90f10d7d2094fa6ddf41f90c24fd +P b6b73a747ad8d0f026074e41c2a4adc529ec2674 +R 285e2022a0bbe1b677ddbb6dec295cd8 U drh -Z 9bbe13d88effafce7032c1658f4f21f3 +Z 74a42c07c09977852193d878c3468fe6 diff --git a/manifest.uuid b/manifest.uuid index a29a8dd016..f7d413534f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -b6b73a747ad8d0f026074e41c2a4adc529ec2674 \ No newline at end of file +ff71d20a9ed129bd1785a3f7a777ce62098735b7 \ No newline at end of file diff --git a/src/vdbe.c b/src/vdbe.c index 643f4b480f..e7c7ed7fe2 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -673,7 +673,7 @@ int sqlite3VdbeExec( assert( pOp->p2<=p->nMem ); pOut = &aMem[pOp->p2]; memAboutToChange(p, pOut); - sqlite3VdbeMemReleaseExternal(pOut); + MemReleaseExt(pOut); pOut->flags = MEM_Int; } @@ -2344,7 +2344,7 @@ case OP_Column: { if( aOffset[p2] ){ assert( rc==SQLITE_OK ); if( zRec ){ - sqlite3VdbeMemReleaseExternal(pDest); + MemReleaseExt(pDest); sqlite3VdbeSerialGet((u8 *)&zRec[aOffset[p2]], aType[p2], pDest); }else{ len = sqlite3VdbeSerialTypeLen(aType[p2]); diff --git a/src/vdbeInt.h b/src/vdbeInt.h index 11a22bc972..846d807075 100644 --- a/src/vdbeInt.h +++ b/src/vdbeInt.h @@ -384,6 +384,9 @@ int sqlite3VdbeMemNumerify(Mem*); int sqlite3VdbeMemFromBtree(BtCursor*,int,int,int,Mem*); void sqlite3VdbeMemRelease(Mem *p); void sqlite3VdbeMemReleaseExternal(Mem *p); +#define MemReleaseExt(X) \ + if((X)->flags&(MEM_Agg|MEM_Dyn|MEM_RowSet|MEM_Frame)) \ + sqlite3VdbeMemReleaseExternal(X); int sqlite3VdbeMemFinalize(Mem*, FuncDef*); const char *sqlite3OpcodeName(int); int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve); diff --git a/src/vdbemem.c b/src/vdbemem.c index 882c686334..d512572825 100644 --- a/src/vdbemem.c +++ b/src/vdbemem.c @@ -271,24 +271,18 @@ int sqlite3VdbeMemFinalize(Mem *pMem, FuncDef *pFunc){ */ void sqlite3VdbeMemReleaseExternal(Mem *p){ assert( p->db==0 || sqlite3_mutex_held(p->db->mutex) ); - testcase( p->flags & MEM_Agg ); - testcase( p->flags & MEM_Dyn ); - testcase( p->flags & MEM_RowSet ); - testcase( p->flags & MEM_Frame ); - if( p->flags&(MEM_Agg|MEM_Dyn|MEM_RowSet|MEM_Frame) ){ - if( p->flags&MEM_Agg ){ - sqlite3VdbeMemFinalize(p, p->u.pDef); - assert( (p->flags & MEM_Agg)==0 ); - sqlite3VdbeMemRelease(p); - }else if( p->flags&MEM_Dyn && p->xDel ){ - assert( (p->flags&MEM_RowSet)==0 ); - p->xDel((void *)p->z); - p->xDel = 0; - }else if( p->flags&MEM_RowSet ){ - sqlite3RowSetClear(p->u.pRowSet); - }else if( p->flags&MEM_Frame ){ - sqlite3VdbeMemSetNull(p); - } + if( p->flags&MEM_Agg ){ + sqlite3VdbeMemFinalize(p, p->u.pDef); + assert( (p->flags & MEM_Agg)==0 ); + sqlite3VdbeMemRelease(p); + }else if( p->flags&MEM_Dyn && p->xDel ){ + assert( (p->flags&MEM_RowSet)==0 ); + p->xDel((void *)p->z); + p->xDel = 0; + }else if( p->flags&MEM_RowSet ){ + sqlite3RowSetClear(p->u.pRowSet); + }else if( p->flags&MEM_Frame ){ + sqlite3VdbeMemSetNull(p); } } @@ -298,7 +292,7 @@ void sqlite3VdbeMemReleaseExternal(Mem *p){ ** (Mem.type==SQLITE_TEXT). */ void sqlite3VdbeMemRelease(Mem *p){ - sqlite3VdbeMemReleaseExternal(p); + MemReleaseExt(p); sqlite3DbFree(p->db, p->zMalloc); p->z = 0; p->zMalloc = 0; @@ -620,7 +614,7 @@ void sqlite3VdbeMemPrepareToChange(Vdbe *pVdbe, Mem *pMem){ */ void sqlite3VdbeMemShallowCopy(Mem *pTo, const Mem *pFrom, int srcType){ assert( (pFrom->flags & MEM_RowSet)==0 ); - sqlite3VdbeMemReleaseExternal(pTo); + MemReleaseExt(pTo); memcpy(pTo, pFrom, MEMCELLSIZE); pTo->xDel = 0; if( (pFrom->flags&MEM_Static)==0 ){ @@ -638,7 +632,7 @@ int sqlite3VdbeMemCopy(Mem *pTo, const Mem *pFrom){ int rc = SQLITE_OK; assert( (pFrom->flags & MEM_RowSet)==0 ); - sqlite3VdbeMemReleaseExternal(pTo); + MemReleaseExt(pTo); memcpy(pTo, pFrom, MEMCELLSIZE); pTo->flags &= ~MEM_Dyn;