diff --git a/build/cocos2d_tests.xcodeproj/project.pbxproj b/build/cocos2d_tests.xcodeproj/project.pbxproj index 64e3ed85e0..1d0d58a98b 100644 --- a/build/cocos2d_tests.xcodeproj/project.pbxproj +++ b/build/cocos2d_tests.xcodeproj/project.pbxproj @@ -1034,6 +1034,8 @@ FADE788A1B96C51C0061590D /* Particle3D in Resources */ = {isa = PBXBuildFile; fileRef = FADE78881B96C51C0061590D /* Particle3D */; }; FADE788D1B96D0710061590D /* PerformanceSpriteTest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FADE788B1B96D0710061590D /* PerformanceSpriteTest.cpp */; }; FADE788E1B96D0710061590D /* PerformanceSpriteTest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FADE788B1B96D0710061590D /* PerformanceSpriteTest.cpp */; }; + FADE78911B9C363D0061590D /* PerformanceTextureTest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FADE788F1B9C363D0061590D /* PerformanceTextureTest.cpp */; }; + FADE78921B9C363D0061590D /* PerformanceTextureTest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FADE788F1B9C363D0061590D /* PerformanceTextureTest.cpp */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -2168,6 +2170,8 @@ FADE78881B96C51C0061590D /* Particle3D */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Particle3D; path = "../tests/performance-tests/Resources/Particle3D"; sourceTree = ""; }; FADE788B1B96D0710061590D /* PerformanceSpriteTest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PerformanceSpriteTest.cpp; sourceTree = ""; }; FADE788C1B96D0710061590D /* PerformanceSpriteTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PerformanceSpriteTest.h; sourceTree = ""; }; + FADE788F1B9C363D0061590D /* PerformanceTextureTest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PerformanceTextureTest.cpp; sourceTree = ""; }; + FADE78901B9C363D0061590D /* PerformanceTextureTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PerformanceTextureTest.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -4785,6 +4789,8 @@ FADE78851B96C4780061590D /* PerformanceParticle3DTest.h */, FADE788B1B96D0710061590D /* PerformanceSpriteTest.cpp */, FADE788C1B96D0710061590D /* PerformanceSpriteTest.h */, + FADE788F1B9C363D0061590D /* PerformanceTextureTest.cpp */, + FADE78901B9C363D0061590D /* PerformanceTextureTest.h */, ); path = tests; sourceTree = ""; @@ -6260,6 +6266,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + FADE78921B9C363D0061590D /* PerformanceTextureTest.cpp in Sources */, FA94B2451B90497E0074B261 /* controller.cpp in Sources */, FADE788E1B96D0710061590D /* PerformanceSpriteTest.cpp in Sources */, FA94B2431B90497E0074B261 /* BaseTest.cpp in Sources */, @@ -6282,6 +6289,7 @@ files = ( FA94B2421B90497E0074B261 /* BaseTest.cpp in Sources */, FADE78861B96C4780061590D /* PerformanceParticle3DTest.cpp in Sources */, + FADE78911B9C363D0061590D /* PerformanceTextureTest.cpp in Sources */, FADE786F1B9451540061590D /* PerformanceNodeChildrenTest.cpp in Sources */, FA94B2351B8F02880074B261 /* Profile.cpp in Sources */, FADE788D1B96D0710061590D /* PerformanceSpriteTest.cpp in Sources */, diff --git a/tests/performance-tests/Classes/tests/PerformanceTextureTest.cpp b/tests/performance-tests/Classes/tests/PerformanceTextureTest.cpp new file mode 100644 index 0000000000..07a3f31eb9 --- /dev/null +++ b/tests/performance-tests/Classes/tests/PerformanceTextureTest.cpp @@ -0,0 +1,334 @@ +#include "PerformanceTextureTest.h" +#include "Profile.h" + +USING_NS_CC; + +PerformceTextureTests::PerformceTextureTests() +{ + ADD_TEST_CASE(TexturePerformceTest); +} + +static float calculateDeltaTime( struct timeval *lastUpdate ) +{ + struct timeval now; + + gettimeofday( &now, nullptr); + + float dt = (now.tv_sec - lastUpdate->tv_sec) + (now.tv_usec - lastUpdate->tv_usec) / 1000000.0f; + + return dt; +} + +//////////////////////////////////////////////////////// +// +// TexturePerformceTest +// +//////////////////////////////////////////////////////// +void TexturePerformceTest::performTestsPNG(const char* filename, const char* fileType, const char* resolution, const char* remark) +{ + struct timeval now; + Texture2D *texture; + auto cache = Director::getInstance()->getTextureCache(); + + Texture2D::PixelFormat defaultFormat = Texture2D::getDefaultAlphaPixelFormat(); + + log("RGBA 8888"); + Texture2D::setDefaultAlphaPixelFormat(Texture2D::PixelFormat::RGBA8888); + gettimeofday(&now, nullptr); + texture = cache->addImage(filename); + if( texture ) + { + auto dt = calculateDeltaTime(&now); + log(" ms:%f", dt); + if (isAutoTesting()) + Profile::getInstance()->addTestResult(genStrVector(fileType, resolution, "RGBA8888", remark, nullptr), + genStrVector(genStr("%f", dt).c_str(), nullptr)); + } + else + log(" ERROR"); + cache->removeTexture(texture); + + log("RGBA 4444"); + Texture2D::setDefaultAlphaPixelFormat(Texture2D::PixelFormat::RGBA4444); + gettimeofday(&now, nullptr); + texture = cache->addImage(filename); + if( texture ) + { + auto dt = calculateDeltaTime(&now); + log(" ms:%f", dt); + if (isAutoTesting()) + Profile::getInstance()->addTestResult(genStrVector(fileType, resolution, "RGBA4444", remark, nullptr), + genStrVector(genStr("%f", dt).c_str(), nullptr)); + } + else + log(" ERROR"); + cache->removeTexture(texture); + + log("RGBA 5551"); + Texture2D::setDefaultAlphaPixelFormat(Texture2D::PixelFormat::RGB5A1); + gettimeofday(&now, nullptr); + texture = cache->addImage(filename); + if( texture ) + { + auto dt = calculateDeltaTime(&now); + log(" ms:%f", dt); + if (isAutoTesting()) + Profile::getInstance()->addTestResult(genStrVector(fileType, resolution, "RGBA5551", remark, nullptr), + genStrVector(genStr("%f", dt).c_str(), nullptr)); + } + else + log(" ERROR"); + cache->removeTexture(texture); + + log("RGB 565"); + Texture2D::setDefaultAlphaPixelFormat(Texture2D::PixelFormat::RGB565); + gettimeofday(&now, nullptr); + texture = cache->addImage(filename); + if( texture ) + { + auto dt = calculateDeltaTime(&now); + log(" ms:%f", dt); + if (isAutoTesting()) + Profile::getInstance()->addTestResult(genStrVector(fileType, resolution, "RGB565", remark, nullptr), + genStrVector(genStr("%f", dt).c_str(), nullptr)); + } + else + log(" ERROR"); + cache->removeTexture(texture); + + Texture2D::setDefaultAlphaPixelFormat(defaultFormat); +} + +void TexturePerformceTest::performTests() +{ + if (isAutoTesting()) { + Profile::getInstance()->testCaseBegin("TextureTest", + genStrVector("FileType", "Resolution", "TextureFormat", "Remark", nullptr), + genStrVector("Time", nullptr)); + } + +// Texture2D *texture; +// struct timeval now; +// auto cache = Director::getInstance()->getTextureCache(); + + log("--------"); + + log("--- PNG 128x128 ---"); + performTestsPNG("Images/test_image.png", "png", "128x128", ""); + +// log("--- PVR 128x128 ---"); +// log("RGBA 8888"); +// gettimeofday(&now, nullptr); +// texture = cache->addImage("Images/test_image_rgba8888.pvr"); +// if( texture ) +// log(" ms:%f", calculateDeltaTime(&now) ); +// else +// log("ERROR"); +// cache->removeTexture(texture); +// +// log("BGRA 8888"); +// gettimeofday(&now, nullptr); +// texture = cache->addImage("Images/test_image_bgra8888.pvr"); +// if( texture ) +// log(" ms:%f", calculateDeltaTime(&now) ); +// else +// log("ERROR"); +// cache->removeTexture(texture); +// +// log("RGBA 4444"); +// gettimeofday(&now, nullptr); +// texture = cache->addImage("Images/test_image_rgba4444.pvr"); +// if( texture ) +// log(" ms:%f", calculateDeltaTime(&now) ); +// else +// log("ERROR"); +// cache->removeTexture(texture); +// +// log("RGB 565"); +// gettimeofday(&now, nullptr); +// texture = cache->addImage("Images/test_image_rgb565.pvr"); +// if( texture ) +// log(" ms:%f", calculateDeltaTime(&now) ); +// else +// log("ERROR"); +// cache->removeTexture(texture); + + + log("--- PNG 512x512 ---"); + performTestsPNG("Images/texture512x512.png", "png", "512x512", ""); + +// log("--- PVR 512x512 ---"); +// log("RGBA 4444"); +// gettimeofday(&now, nullptr); +// texture = cache->addImage("Images/texture512x512_rgba4444.pvr"); +// if( texture ) +// log(" ms:%f", calculateDeltaTime(&now) ); +// else +// log("ERROR"); +// cache->removeTexture(texture); + + // + // ---- 1024X1024 + // RGBA4444 + // Empty image + // + + log("EMPTY IMAGE"); + log("--- PNG 1024x1024 ---"); + performTestsPNG("Images/texture1024x1024.png", "png", "1024x1024", "EMPTY IMAGE"); + +// log("--- PVR 1024x1024 ---"); +// log("RGBA 4444"); +// gettimeofday(&now, nullptr); +// texture = cache->addImage("Images/texture1024x1024_rgba4444.pvr"); +// if( texture ) +// log(" ms:%f", calculateDeltaTime(&now) ); +// else +// log("ERROR"); +// cache->removeTexture(texture); +// +// log("--- PVR.GZ 1024x1024 ---"); +// log("RGBA 4444"); +// gettimeofday(&now, nullptr); +// texture = cache->addImage("Images/texture1024x1024_rgba4444.pvr.gz"); +// if( texture ) +// log(" ms:%f", calculateDeltaTime(&now) ); +// else +// log("ERROR"); +// cache->removeTexture(texture); +// +// log("--- PVR.CCZ 1024x1024 ---"); +// log("RGBA 4444"); +// gettimeofday(&now, nullptr); +// texture = cache->addImage("Images/texture1024x1024_rgba4444.pvr.ccz"); +// if( texture ) +// log(" ms:%f", calculateDeltaTime(&now) ); +// else +// log("ERROR"); +// cache->removeTexture(texture); + + // + // ---- 1024X1024 + // RGBA4444 + // SpriteSheet images + // + + log("SPRITESHEET IMAGE"); + log("--- PNG 1024x1024 ---"); + performTestsPNG("Images/PlanetCute-1024x1024.png", "png", "1024x1024", "SPRITESHEET IMAGE"); + +// log("--- PVR 1024x1024 ---"); +// log("RGBA 4444"); +// gettimeofday(&now, nullptr); +// texture = cache->addImage("Images/PlanetCute-1024x1024-rgba4444.pvr"); +// if( texture ) +// log(" ms:%f", calculateDeltaTime(&now) ); +// else +// log("ERROR"); +// cache->removeTexture(texture); +// +// log("--- PVR.GZ 1024x1024 ---"); +// log("RGBA 4444"); +// gettimeofday(&now, nullptr); +// texture = cache->addImage("Images/PlanetCute-1024x1024-rgba4444.pvr.gz"); +// if( texture ) +// log(" ms:%f", calculateDeltaTime(&now) ); +// else +// log("ERROR"); +// cache->removeTexture(texture); +// +// log("--- PVR.CCZ 1024x1024 ---"); +// log("RGBA 4444"); +// gettimeofday(&now, nullptr); +// texture = cache->addImage("Images/PlanetCute-1024x1024-rgba4444.pvr.ccz"); +// if( texture ) +// log(" ms:%f", calculateDeltaTime(&now) ); +// else +// log("ERROR"); +// cache->removeTexture(texture); + + + // + // ---- 1024X1024 + // RGBA8888 + // Landscape Image + // + + log("LANDSCAPE IMAGE"); + + log("--- PNG 1024x1024 ---"); + performTestsPNG("Images/landscape-1024x1024.png", "png", "1024x1024", "LANDSCAPE IMAGE"); + +// log("--- PVR 1024x1024 ---"); +// log("RGBA 8888"); +// gettimeofday(&now, nullptr); +// texture = cache->addImage("Images/landscape-1024x1024-rgba8888.pvr"); +// if( texture ) +// log(" ms:%f", calculateDeltaTime(&now) ); +// else +// log("ERROR"); +// cache->removeTexture(texture); +// +// log("--- PVR.GZ 1024x1024 ---"); +// log("RGBA 8888"); +// gettimeofday(&now, nullptr); +// texture = cache->addImage("Images/landscape-1024x1024-rgba8888.pvr.gz"); +// if( texture ) +// log(" ms:%f", calculateDeltaTime(&now) ); +// else +// log("ERROR"); +// cache->removeTexture(texture); +// +// log("--- PVR.CCZ 1024x1024 ---"); +// log("RGBA 8888"); +// gettimeofday(&now, nullptr); +// texture = cache->addImage("Images/landscape-1024x1024-rgba8888.pvr.ccz"); +// if( texture ) +// log(" ms:%f", calculateDeltaTime(&now) ); +// else +// log("ERROR"); +// cache->removeTexture(texture); + + + // + // 2048x2048 + // RGBA444 + // + +// most platform don't support texture with width/height is 2048 +// log("--- PNG 2048x2048 ---"); +// performTestsPNG("Images/texture2048x2048.png"); + +// log("--- PVR 2048x2048 ---"); +// log("RGBA 4444"); +// gettimeofday(&now, nullptr); +// texture = cache->addImage("Images/texture2048x2048_rgba4444.pvr"); +// if( texture ) +// log(" ms:%f", calculateDeltaTime(&now) ); +// else +// log("ERROR"); +// cache->removeTexture(texture); + + if (isAutoTesting()) + { + Profile::getInstance()->testCaseEnd(); + setAutoTesting(false); + } +} + +void TexturePerformceTest::onEnter() +{ + TestCase::onEnter(); + + performTests(); +} + +std::string TexturePerformceTest::title() const +{ + return "Texture Performance Test"; +} + +std::string TexturePerformceTest::subtitle() const +{ + return "See console for results"; +} diff --git a/tests/performance-tests/Classes/tests/PerformanceTextureTest.h b/tests/performance-tests/Classes/tests/PerformanceTextureTest.h new file mode 100644 index 0000000000..b4a31ee170 --- /dev/null +++ b/tests/performance-tests/Classes/tests/PerformanceTextureTest.h @@ -0,0 +1,21 @@ +#ifndef __PERFORMANCE_TEXTURE_TEST_H__ +#define __PERFORMANCE_TEXTURE_TEST_H__ + +#include "BaseTest.h" + +DEFINE_TEST_SUITE(PerformceTextureTests); + +class TexturePerformceTest : public TestCase +{ +public: + CREATE_FUNC(TexturePerformceTest); + + virtual void performTests(); + void performTestsPNG(const char* filename, const char* fileType, const char* resolution, const char* remark); + + virtual std::string title() const override; + virtual std::string subtitle() const override; + virtual void onEnter() override; +}; + +#endif diff --git a/tests/performance-tests/Classes/tests/controller.cpp b/tests/performance-tests/Classes/tests/controller.cpp index bf4a03853d..72b47346f2 100644 --- a/tests/performance-tests/Classes/tests/controller.cpp +++ b/tests/performance-tests/Classes/tests/controller.cpp @@ -26,6 +26,7 @@ public: addTest("Particle3D Tests", []() { return new PerformceParticle3DTests(); }); addTest("Sprite Tests", []() { return new PerformceParticle3DTests(); }); addTest("Sprite Tests", []() { return new PerformceSpriteTests(); }); + addTest("Texture Tests", []() { return new PerformceTextureTests(); }); } }; diff --git a/tests/performance-tests/Classes/tests/tests.h b/tests/performance-tests/Classes/tests/tests.h index d45910b5cb..0da1b06ea5 100644 --- a/tests/performance-tests/Classes/tests/tests.h +++ b/tests/performance-tests/Classes/tests/tests.h @@ -7,5 +7,6 @@ #include "PerformanceParticleTest.h" #include "PerformanceParticle3DTest.h" #include "PerformanceSpriteTest.h" +#include "PerformanceTextureTest.h" #endif diff --git a/tests/performance-tests/Resources/Images/PlanetCute-1024x1024.png b/tests/performance-tests/Resources/Images/PlanetCute-1024x1024.png new file mode 100644 index 0000000000..7b047c6f1b Binary files /dev/null and b/tests/performance-tests/Resources/Images/PlanetCute-1024x1024.png differ diff --git a/tests/performance-tests/Resources/Images/landscape-1024x1024.png b/tests/performance-tests/Resources/Images/landscape-1024x1024.png new file mode 100644 index 0000000000..b592a8ba20 Binary files /dev/null and b/tests/performance-tests/Resources/Images/landscape-1024x1024.png differ diff --git a/tests/performance-tests/Resources/Images/test_image.png b/tests/performance-tests/Resources/Images/test_image.png new file mode 100755 index 0000000000..eaf9474764 Binary files /dev/null and b/tests/performance-tests/Resources/Images/test_image.png differ diff --git a/tests/performance-tests/Resources/Images/texture1024x1024.png b/tests/performance-tests/Resources/Images/texture1024x1024.png new file mode 100755 index 0000000000..12a15fae99 Binary files /dev/null and b/tests/performance-tests/Resources/Images/texture1024x1024.png differ diff --git a/tests/performance-tests/Resources/Images/texture512x512.png b/tests/performance-tests/Resources/Images/texture512x512.png new file mode 100755 index 0000000000..170c02fd82 Binary files /dev/null and b/tests/performance-tests/Resources/Images/texture512x512.png differ