Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
kicad-source-mirror
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
kicad-source-mirror
Commits
06f4662e
Commit
06f4662e
authored
Nov 27, 2013
by
Maciej Suminski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Profile counter simplified, so it should be more portable.
parent
251f0c7f
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
28 additions
and
232 deletions
+28
-232
gpu_manager.cpp
common/gal/opengl/gpu_manager.cpp
+2
-3
profile.h
common/profile.h
+0
-147
view.cpp
common/view/view.cpp
+2
-2
profile.h
include/profile.h
+16
-72
pns_shove.cpp
pcbnew/router/pns_shove.cpp
+8
-8
No files found.
common/gal/opengl/gpu_manager.cpp
View file @
06f4662e
...
...
@@ -189,7 +189,7 @@ void GPU_CACHED_MANAGER::uploadToGpu()
{
#ifdef __WXDEBUG__
prof_counter
totalTime
;
prof_start
(
&
totalTime
,
false
);
prof_start
(
&
totalTime
);
#endif
/* __WXDEBUG__ */
if
(
!
m_buffersInitialized
)
...
...
@@ -214,8 +214,7 @@ void GPU_CACHED_MANAGER::uploadToGpu()
#ifdef __WXDEBUG__
prof_end
(
&
totalTime
);
wxLogDebug
(
wxT
(
"Uploading %d vertices to GPU / %.1f ms"
),
bufferSize
,
(
double
)
totalTime
.
value
/
1000.0
);
wxLogDebug
(
wxT
(
"Uploading %d vertices to GPU / %.1f ms"
),
bufferSize
,
totalTime
.
msecs
()
);
#endif
/* __WXDEBUG__ */
}
...
...
common/profile.h
deleted
100644 → 0
View file @
251f0c7f
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2013 CERN
* @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
/**
* @file profile.h:
* @brief Simple profiling functions for measuring code execution time.
*/
#ifndef __TPROFILE_H
#define __TPROFILE_H
#include <sys/time.h>
#include <stdint.h>
/**
* Function rdtsc
* Returns processor's time-stamp counter. Main purpose is precise time measuring of code
* execution time.
* @return unsigned long long - Value of time-stamp counter.
*/
#if defined(__i386__)
static
__inline__
unsigned
long
long
rdtsc
()
{
unsigned
long
long
int
x
;
__asm__
volatile
(
".byte 0x0f, 0x31"
:
"=A"
(
x
)
);
return
x
;
}
#elif defined(__x86_64__)
static
__inline__
unsigned
long
long
rdtsc
()
{
unsigned
hi
,
lo
;
__asm__
__volatile__
(
"rdtsc"
:
"=a"
(
lo
),
"=d"
(
hi
)
);
return
(
(
unsigned
long
long
)
lo
)
|
(
(
(
unsigned
long
long
)
hi
)
<<
32
);
}
#elif defined(__powerpc__)
static
__inline__
unsigned
long
long
rdtsc
()
{
unsigned
long
long
int
result
=
0
;
unsigned
long
int
upper
,
lower
,
tmp
;
__asm__
volatile
(
"0:
\n
"
"
\t
mftbu %0
\n
"
"
\t
mftb %1
\n
"
"
\t
mftbu %2
\n
"
"
\t
cmpw %2,%0
\n
"
"
\t
bne 0b
\n
"
:
"=r"
(
upper
),
"=r"
(
lower
),
"=r"
(
tmp
)
);
result
=
upper
;
result
=
result
<<
32
;
result
=
result
|
lower
;
return
result
;
}
#endif
/* __powerpc__ */
// Fixme: OS X version
/**
* Function get_tics
* Returns the number of microseconds that have elapsed since the system was started.
* @return uint64_t Number of microseconds.
*/
static
inline
uint64_t
get_tics
()
{
struct
timeval
tv
;
gettimeofday
(
&
tv
,
NULL
);
return
(
uint64_t
)
tv
.
tv_sec
*
1000000ULL
+
(
uint64_t
)
tv
.
tv_usec
;
}
/**
* Structure for storing data related to profiling counters.
*/
struct
prof_counter
{
uint64_t
value
;
/// Stored timer value
bool
use_rdtsc
;
/// Method of time measuring (rdtsc or tics)
};
/**
* Function prof_start
* Begins code execution time counting for a given profiling counter.
* @param cnt is the counter which should be started.
* @param use_rdtsc tells if processor's time-stamp counter should be used for time counting.
* Otherwise is system tics method will be used. IMPORTANT: time-stamp counter should not
* be used on multicore machines executing threaded code.
*/
static
inline
void
prof_start
(
prof_counter
*
cnt
,
bool
use_rdtsc
)
{
cnt
->
use_rdtsc
=
use_rdtsc
;
if
(
use_rdtsc
)
{
cnt
->
value
=
rdtsc
();
}
else
{
cnt
->
value
=
get_tics
();
}
}
/**
* Function prof_stop
* Ends code execution time counting for a given profiling counter.
* @param cnt is the counter which should be stopped.
*/
static
inline
void
prof_end
(
prof_counter
*
cnt
)
{
if
(
cnt
->
use_rdtsc
)
cnt
->
value
=
rdtsc
()
-
cnt
->
value
;
else
cnt
->
value
=
get_tics
()
-
cnt
->
value
;
}
#endif
common/view/view.cpp
View file @
06f4662e
...
...
@@ -971,7 +971,7 @@ void VIEW::RecacheAllItems( bool aImmediately )
#ifdef __WXDEBUG__
prof_counter
totalRealTime
;
prof_start
(
&
totalRealTime
,
false
);
prof_start
(
&
totalRealTime
);
#endif
/* __WXDEBUG__ */
for
(
LAYER_MAP_ITER
i
=
m_layers
.
begin
();
i
!=
m_layers
.
end
();
++
i
)
...
...
@@ -992,7 +992,7 @@ void VIEW::RecacheAllItems( bool aImmediately )
prof_end
(
&
totalRealTime
);
wxLogDebug
(
wxT
(
"RecacheAllItems::immediately: %u %.1f ms"
),
aImmediately
,
(
double
)
totalRealTime
.
value
/
1000.0
);
aImmediately
,
totalRealTime
.
msecs
()
);
#endif
/* __WXDEBUG__ */
}
...
...
include/profile.h
View file @
06f4662e
...
...
@@ -31,60 +31,9 @@
#define __TPROFILE_H
#include <sys/time.h>
#include <string>
#include <stdint.h>
/**
* Function rdtsc
* Returns processor's time-stamp counter. Main purpose is precise time measuring of code
* execution time.
* @return unsigned long long - Value of time-stamp counter.
*/
#if defined(__i386__)
static
__inline__
unsigned
long
long
rdtsc
()
{
unsigned
long
long
int
x
;
__asm__
volatile
(
".byte 0x0f, 0x31"
:
"=A"
(
x
)
);
return
x
;
}
#elif defined(__x86_64__)
static
__inline__
unsigned
long
long
rdtsc
()
{
unsigned
hi
,
lo
;
__asm__
__volatile__
(
"rdtsc"
:
"=a"
(
lo
),
"=d"
(
hi
)
);
return
(
(
unsigned
long
long
)
lo
)
|
(
(
(
unsigned
long
long
)
hi
)
<<
32
);
}
#elif defined(__powerpc__)
static
__inline__
unsigned
long
long
rdtsc
()
{
unsigned
long
long
int
result
=
0
;
unsigned
long
int
upper
,
lower
,
tmp
;
__asm__
volatile
(
"0:
\n
"
"
\t
mftbu %0
\n
"
"
\t
mftb %1
\n
"
"
\t
mftbu %2
\n
"
"
\t
cmpw %2,%0
\n
"
"
\t
bne 0b
\n
"
:
"=r"
(
upper
),
"=r"
(
lower
),
"=r"
(
tmp
)
);
result
=
upper
;
result
=
result
<<
32
;
result
=
result
|
lower
;
return
result
;
}
#endif
/* __powerpc__ */
// Fixme: OS X version
/**
* Function get_tics
* Returns the number of microseconds that have elapsed since the system was started.
...
...
@@ -98,14 +47,22 @@ static inline uint64_t get_tics()
return
(
uint64_t
)
tv
.
tv_sec
*
1000000ULL
+
(
uint64_t
)
tv
.
tv_usec
;
}
/**
* Structure for storing data related to profiling counters.
*/
struct
prof_counter
{
uint64_t
value
;
/// Stored timer value
bool
use_rdtsc
;
/// Method of time measuring (rdtsc or tics)
uint64_t
start
,
end
;
// Stored timer value
uint64_t
usecs
()
const
{
return
end
-
start
;
}
float
msecs
()
const
{
return
(
end
-
start
)
/
1000
.
0
;
}
};
/**
...
...
@@ -116,32 +73,19 @@ struct prof_counter
* Otherwise is system tics method will be used. IMPORTANT: time-stamp counter should not
* be used on multicore machines executing threaded code.
*/
static
inline
void
prof_start
(
prof_counter
*
cnt
,
bool
use_rdtsc
)
static
inline
void
prof_start
(
prof_counter
*
aCnt
)
{
cnt
->
use_rdtsc
=
use_rdtsc
;
if
(
use_rdtsc
)
{
cnt
->
value
=
rdtsc
();
}
else
{
cnt
->
value
=
get_tics
();
}
aCnt
->
start
=
get_tics
();
}
/**
* Function prof_stop
* Ends code execution time counting for a given profiling counter.
* @param cnt is the counter which should be stopped.
*/
static
inline
void
prof_end
(
prof_counter
*
c
nt
)
static
inline
void
prof_end
(
prof_counter
*
aC
nt
)
{
if
(
cnt
->
use_rdtsc
)
cnt
->
value
=
rdtsc
()
-
cnt
->
value
;
else
cnt
->
value
=
get_tics
()
-
cnt
->
value
;
aCnt
->
end
=
get_tics
();
}
#endif
pcbnew/router/pns_shove.cpp
View file @
06f4662e
...
...
@@ -343,11 +343,11 @@ PNS_SHOVE::ShoveStatus PNS_SHOVE::ShoveLines( PNS_LINE* aCurrentHead )
PNS_LINE
*
currentLine
=
lineStack
.
top
();
prof_start
(
&
totalRealTime
,
false
);
prof_start
(
&
totalRealTime
);
nearest
=
node
->
NearestObstacle
(
currentLine
,
PNS_ITEM
::
ANY
);
prof_end
(
&
totalRealTime
);
TRACE
(
2
,
"t-nearestObstacle %lld us"
,
(
totalRealTime
.
value
)
);
TRACE
(
2
,
"t-nearestObstacle %lld us"
,
totalRealTime
.
usecs
(
)
);
if
(
!
nearest
)
{
...
...
@@ -362,7 +362,7 @@ PNS_SHOVE::ShoveStatus PNS_SHOVE::ShoveLines( PNS_LINE* aCurrentHead )
TRACE
(
1
,
"Iter %d optimize-line [range %d-%d, total %d]"
,
iter
%
r_start
%
r_end
%
original
->
GetCLine
().
PointCount
()
);
// lastWalkSolid = NULL;
prof_start
(
&
totalRealTime
,
false
);
prof_start
(
&
totalRealTime
);
if
(
optimizer
.
Optimize
(
original
,
&
optimized
)
)
{
...
...
@@ -376,7 +376,7 @@ PNS_SHOVE::ShoveStatus PNS_SHOVE::ShoveLines( PNS_LINE* aCurrentHead )
prof_end
(
&
totalRealTime
);
TRACE
(
2
,
"t-optimizeObstacle %lld us"
,
(
totalRealTime
.
value
)
);
TRACE
(
2
,
"t-optimizeObstacle %lld us"
,
totalRealTime
.
usecs
(
)
);
}
lineStack
.
pop
();
...
...
@@ -393,12 +393,12 @@ PNS_SHOVE::ShoveStatus PNS_SHOVE::ShoveLines( PNS_LINE* aCurrentHead )
PNS_LINE
*
collidingLine
=
node
->
AssembleLine
(
pseg
);
PNS_LINE
*
shovedLine
=
collidingLine
->
CloneProperties
();
prof_start
(
&
totalRealTime
,
false
);
prof_start
(
&
totalRealTime
);
ShoveStatus
st
=
shoveSingleLine
(
node
,
currentLine
,
collidingLine
,
*
pseg
,
shovedLine
);
prof_end
(
&
totalRealTime
);
TRACE
(
2
,
"t-shoveSingle %lld us"
,
(
totalRealTime
.
value
)
);
TRACE
(
2
,
"t-shoveSingle %lld us"
,
totalRealTime
.
usecs
(
)
);
if
(
st
==
SH_OK
)
{
...
...
@@ -441,11 +441,11 @@ PNS_SHOVE::ShoveStatus PNS_SHOVE::ShoveLines( PNS_LINE* aCurrentHead )
walkaround
.
SetSolidsOnly
(
true
);
walkaround
.
SetSingleDirection
(
true
);
prof_start
(
&
totalRealTime
,
false
);
prof_start
(
&
totalRealTime
);
walkaround
.
Route
(
*
currentLine
,
*
walkaroundLine
,
false
);
prof_end
(
&
totalRealTime
);
TRACE
(
2
,
"t-walkSolid %lld us"
,
(
totalRealTime
.
value
)
);
TRACE
(
2
,
"t-walkSolid %lld us"
,
totalRealTime
.
usecs
(
)
);
node
->
Replace
(
currentLine
,
walkaroundLine
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment