Forráskód Böngészése

Profiler: add a unittest.

Kim Kulling 8 éve
szülő
commit
2cb1a9efc6
5 módosított fájl, 162 hozzáadás és 18 törlés
  1. 9 11
      code/Profiler.h
  2. 14 4
      include/assimp/LogStream.hpp
  3. 1 0
      test/CMakeLists.txt
  4. 61 3
      test/unit/UnitTestPCH.h
  5. 77 0
      test/unit/utProfiler.cpp

+ 9 - 11
code/Profiler.h

@@ -52,21 +52,19 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #include <map>
 
 namespace Assimp {
-    namespace Profiling {
-
-        using namespace Formatter;
+namespace Profiling {
 
+using namespace Formatter;
 
 // ------------------------------------------------------------------------------------------------
 /** Simple wrapper around boost::timer to simplify reporting. Timings are automatically
  *  dumped to the log file.
  */
-class Profiler
-{
-
+class Profiler {
 public:
-
-    Profiler() {}
+    Profiler() {
+        // empty
+    }
 
 public:
 
@@ -89,12 +87,12 @@ public:
     }
 
 private:
-
-    typedef std::map<std::string,std::chrono::time_point<std::chrono::system_clock>> RegionMap;
+    using RegionMap = std::map<std::string,std::chrono::time_point<std::chrono::system_clock>>;
     RegionMap regions;
 };
 
-    }
+}
 }
 
 #endif
+

+ 14 - 4
include/assimp/LogStream.hpp

@@ -64,12 +64,11 @@ class ASSIMP_API LogStream
 {
 protected:
     /** @brief  Default constructor */
-    LogStream() {
-    }
+    LogStream();
+
 public:
     /** @brief  Virtual destructor  */
-    virtual ~LogStream() {
-    }
+    virtual ~LogStream();
 
     // -------------------------------------------------------------------
     /** @brief  Overwrite this for your own output methods
@@ -94,6 +93,17 @@ public:
         IOSystem* io = NULL);
 
 }; // !class LogStream
+
+inline
+LogStream::LogStream() {
+    // empty
+}
+
+inline
+LogStream::~LogStream() {
+    // empty
+}
+
 // ------------------------------------------------------------------------------------
 } // Namespace Assimp
 

+ 1 - 0
test/CMakeLists.txt

@@ -129,6 +129,7 @@ SET( TEST_SRCS
   unit/utVector3.cpp
   unit/utXImporterExporter.cpp
   unit/utD3MFImportExport.cpp
+  unit/utProfiler.cpp
 )
 
 SOURCE_GROUP( tests FILES  ${TEST_SRCS} )

+ 61 - 3
test/unit/UnitTestPCH.h

@@ -1,8 +1,45 @@
+/*
+---------------------------------------------------------------------------
+Open Asset Import Library (assimp)
+---------------------------------------------------------------------------
 
+Copyright (c) 2006-2017, assimp team
 
-// #ifndef ASSIMP_BUILD_SINGLETHREADED
-// #    include <boost/thread.hpp>
-// #endif
+
+All rights reserved.
+
+Redistribution and use of this software in source and binary forms,
+with or without modification, are permitted provided that the following
+conditions are met:
+
+* Redistributions of source code must retain the above
+copyright notice, this list of conditions and the
+following disclaimer.
+
+* Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the
+following disclaimer in the documentation and/or other
+materials provided with the distribution.
+
+* Neither the name of the assimp team, nor the names of its
+contributors may be used to endorse or promote products
+derived from this software without specific prior
+written permission of the assimp team.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+---------------------------------------------------------------------------
+*/
+#pragma once
 
 // We need to be sure to have the same STL settings as Assimp
 
@@ -10,6 +47,27 @@
 #include <gtest/gtest.h>
 #include <memory>
 #include <math.h>
+#include <assimp/LogStream.hpp>
+
+class UTLogStream : public Assimp::LogStream {
+public:
+    UTLogStream()
+    : LogStream() {
+        // empty
+    }
+
+    virtual ~UTLogStream() {
+        // empty
+    }
+
+    void write(const char* message) override {
+        if ( nullptr != message ) {
+            m_messages.push_back( std::string( message ) );
+        }
+    }
+
+    std::vector<std::string> m_messages;
+};
 
 #undef min
 #undef max

+ 77 - 0
test/unit/utProfiler.cpp

@@ -0,0 +1,77 @@
+/*
+---------------------------------------------------------------------------
+Open Asset Import Library (assimp)
+---------------------------------------------------------------------------
+
+Copyright (c) 2006-2017, assimp team
+
+
+All rights reserved.
+
+Redistribution and use of this software in source and binary forms,
+with or without modification, are permitted provided that the following
+conditions are met:
+
+* Redistributions of source code must retain the above
+copyright notice, this list of conditions and the
+following disclaimer.
+
+* Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the
+following disclaimer in the documentation and/or other
+materials provided with the distribution.
+
+* Neither the name of the assimp team, nor the names of its
+contributors may be used to endorse or promote products
+derived from this software without specific prior
+written permission of the assimp team.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+---------------------------------------------------------------------------
+*/
+#include "UnitTestPCH.h"
+
+#include "code/Profiler.h"
+#include <assimp/DefaultLogger.hpp>
+
+using namespace ::Assimp;
+using namespace ::Assimp::Profiling;
+
+class utProfiler : public ::testing::Test {
+public:
+    LogStream *m_stream;
+
+    virtual void SetUp() {
+        m_stream = new UTLogStream;
+        DefaultLogger::create();
+        DefaultLogger::get()->attachStream( m_stream );
+    }
+
+    virtual void TearDown() {
+        DefaultLogger::get()->detatchStream( m_stream );
+        m_stream = nullptr;
+        DefaultLogger::kill();
+    }
+};
+
+TEST_F( utProfiler, addRegion_success ) {
+    Profiler myProfiler;
+    myProfiler.BeginRegion( "t1" );
+    for ( int i=0; i<10; i++ ) {
+        volatile int j=0;
+        j++;
+    }
+    myProfiler.EndRegion( "t1" );
+    UTLogStream *stream( (UTLogStream*) m_stream );
+    //EXPECT_FALSE( stream->m_messages.empty() );
+}