X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit%2Futc-Dali-SuperBlurView.cpp;h=26d72f1e196ebfed5d0f54a1ae572ac6246e55a6;hp=de9a7d5d5e0a81ef6218fa684768d6b2bd1f8e86;hb=HEAD;hpb=820c66e71516e7a25600b8b5de2e84b5d44d8ff3 diff --git a/automated-tests/src/dali-toolkit/utc-Dali-SuperBlurView.cpp b/automated-tests/src/dali-toolkit/utc-Dali-SuperBlurView.cpp index de9a7d5..3a0012e 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-SuperBlurView.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-SuperBlurView.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,16 +15,16 @@ * */ -#include #include +#include // Need to override adaptor classes for toolkit test harness, so include // test harness headers before dali headers. #include -#include #include #include +#include using namespace Dali; using namespace Dali::Toolkit; @@ -39,14 +39,13 @@ void utc_dali_toolkit_super_blur_view_cleanup(void) test_return_value = TET_PASS; } - namespace { -const int BLUR_LEVELS = 3; -const int RENDER_FRAME_INTERVAL = 16; - -static bool gObjectCreatedCallBackCalled; -static void TestCallback(BaseHandle handle) +const int BLUR_LEVELS = 3; +const int RENDER_FRAME_INTERVAL = 16; +static const char* TEST_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/gallery-small-1.jpg"; +static bool gObjectCreatedCallBackCalled; +static void TestCallback(BaseHandle handle) { gObjectCreatedCallBackCalled = true; } @@ -64,7 +63,7 @@ int Wait(ToolkitTestApplication& application, int duration = 0) { int time = 0; - for(int i = 0; i <= ( duration / RENDER_FRAME_INTERVAL); i++) + for(int i = 0; i <= (duration / RENDER_FRAME_INTERVAL); i++) { application.SendNotification(); application.Render(RENDER_FRAME_INTERVAL); @@ -74,33 +73,51 @@ int Wait(ToolkitTestApplication& application, int duration = 0) return time; } -Image CreateSolidColorImage( ToolkitTestApplication& application, const Vector4& color, unsigned int width, unsigned int height ) +Texture CreateSolidColorTexture(ToolkitTestApplication& application, const Vector4& color, unsigned int width, unsigned int height) { - BufferImage imageData = BufferImage::New( width, height, Pixel::RGBA8888 ); + unsigned int size = width * height; + uint8_t* pixbuf = new uint8_t[size * 4]; - // Create the image - PixelBuffer* pixbuf = imageData.GetBuffer(); - unsigned int size = width * height; + for(size_t i = 0; i < size; i++) + { + pixbuf[i * 4 + 0] = 0xFF * color.r; + pixbuf[i * 4 + 1] = 0xFF * color.g; + pixbuf[i * 4 + 2] = 0xFF * color.b; + pixbuf[i * 4 + 3] = 0xFF * color.a; + } - for( size_t i = 0; i < size; i++ ) - { - pixbuf[i*4+0] = 0xFF * color.r; - pixbuf[i*4+1] = 0xFF * color.g; - pixbuf[i*4+2] = 0xFF * color.b; - pixbuf[i*4+3] = 0xFF * color.a; - } - imageData.Update(); + PixelData pixels = PixelData::New(pixbuf, size, width, height, Pixel::RGBA8888, PixelData::ReleaseFunction::DELETE_ARRAY); - application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE ); - application.SendNotification(); - application.Render(RENDER_FRAME_INTERVAL); - application.Render(RENDER_FRAME_INTERVAL); - application.SendNotification(); + Texture texture = Texture::New(TextureType::TEXTURE_2D, pixels.GetPixelFormat(), pixels.GetWidth(), pixels.GetHeight()); + texture.Upload(pixels, 0, 0, 0, 0, pixels.GetWidth(), pixels.GetHeight()); - return imageData; + return texture; } -}//namespace +class SignalHandler : public Dali::ConnectionTracker +{ +public: + SignalHandler() + : mCalls(0) + { + } + + void Callback(SuperBlurView handle) + { + mCalls++; + tet_infoline("Signal called"); + } + + unsigned int GetCalls() const + { + return mCalls; + } + +private: + unsigned int mCalls; ///< Keeps track of how many times the signal has been called. +}; + +} //namespace int UtcDaliSuperBlurViewNew(void) { @@ -110,49 +127,188 @@ int UtcDaliSuperBlurViewNew(void) // Test default constructor. SuperBlurView blurView; - DALI_TEST_CHECK( !blurView ); + DALI_TEST_CHECK(!blurView); // Test object creation - blurView = SuperBlurView::New( BLUR_LEVELS ); - DALI_TEST_CHECK( blurView ); + blurView = SuperBlurView::New(BLUR_LEVELS); + DALI_TEST_CHECK(blurView); //Additional check to ensure object is created by checking if it's registered - ObjectRegistry registry = Stage::GetCurrent().GetObjectRegistry(); - DALI_TEST_CHECK( registry ); + ObjectRegistry registry = application.GetCore().GetObjectRegistry(); + DALI_TEST_CHECK(registry); gObjectCreatedCallBackCalled = false; - registry.ObjectCreatedSignal().Connect( &TestCallback ); + registry.ObjectCreatedSignal().Connect(&TestCallback); { - SuperBlurView blurView = SuperBlurView::New( BLUR_LEVELS ); + SuperBlurView blurView = SuperBlurView::New(BLUR_LEVELS); } - DALI_TEST_CHECK( gObjectCreatedCallBackCalled ); + DALI_TEST_CHECK(gObjectCreatedCallBackCalled); // Test copy constructor - SuperBlurView blurViewCopy2( blurView ); - DALI_TEST_CHECK( blurViewCopy2 ); + SuperBlurView blurViewCopy2(blurView); + DALI_TEST_CHECK(blurViewCopy2); // Test down cast Actor actorView; - actorView = blurView; - SuperBlurView downCastView = SuperBlurView::DownCast( actorView ); - DALI_TEST_CHECK( downCastView ); + actorView = blurView; + SuperBlurView downCastView = SuperBlurView::DownCast(actorView); + DALI_TEST_CHECK(downCastView); + END_TEST; +} + +int UtcDaliSuperBlurViewCreate(void) +{ + ToolkitTestApplication application; + + tet_infoline(" UtcDaliSuperBlurViewNew "); + + // Test default constructor. + SuperBlurView blurView; + DALI_TEST_CHECK(!blurView); + + // Test object creation + TypeInfo type = TypeRegistry::Get().GetTypeInfo("SuperBlurView"); + if(type) + { + Dali::BaseHandle handle = type.CreateInstance(); + if(handle) + { + blurView = Dali::Toolkit::SuperBlurView::DownCast(handle); + } + } + + DALI_TEST_CHECK(blurView); + + END_TEST; +} + +int UtcDaliSuperBlurViewSetTexture(void) +{ + ToolkitTestApplication application; + + tet_infoline(" UtcDaliSuperBlurViewSetTexture "); + + SuperBlurView blurView = SuperBlurView::New(BLUR_LEVELS); + blurView.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f)); + + Texture inputTexture = CreateSolidColorTexture(application, Color::GREEN, 50, 50); + blurView.SetTexture(inputTexture); + // start multiple guassian blur call, each guassian blur creates two render tasks + DALI_TEST_CHECK(application.GetScene().GetRenderTaskList().GetTaskCount() == 1 + BLUR_LEVELS * 2); + + { + // create renderers for the original image and each blurred image + application.GetScene().Add(blurView); + Wait(application); + DALI_TEST_EQUALS(blurView.GetRendererCount(), BLUR_LEVELS + 1, TEST_LOCATION); + + Wait(application); + application.GetScene().Remove(blurView); + } + + END_TEST; +} + +int UtcDaliSuperBlurViewSetTexture2(void) +{ + ToolkitTestApplication application; + Integration::Scene stage = application.GetScene(); + + tet_infoline(" UtcDaliSuperBlurViewSetTexture2 - test setting a second texture "); + + SuperBlurView blurView = SuperBlurView::New(BLUR_LEVELS); + blurView.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f)); + + tet_infoline("Call SetTexture and add blurview to stage"); + Texture inputTexture = CreateSolidColorTexture(application, Color::GREEN, 50, 50); + blurView.SetTexture(inputTexture); + + // start multiple guassian blur call, each guassian blur creates two render tasks + DALI_TEST_CHECK(application.GetScene().GetRenderTaskList().GetTaskCount() == 1 + BLUR_LEVELS * 2); + { + // create renderers for the original image and each blurred image + stage.Add(blurView); + Wait(application); + DALI_TEST_EQUALS(blurView.GetRendererCount(), BLUR_LEVELS + 1, TEST_LOCATION); + + tet_infoline("Wait for a second to allow blur to finish"); + Wait(application, 1000); + + tet_infoline("Remove from stage"); + application.GetScene().Remove(blurView); + } + + tet_infoline("Test that there are no render tasks remaining"); + DALI_TEST_EQUALS(blurView.GetRendererCount(), 0, TEST_LOCATION); + + tet_infoline("Call SetTexture a second time and add blurview back to stage"); + Texture inputTexture2 = CreateSolidColorTexture(application, Color::CYAN, 50, 50); + blurView.SetTexture(inputTexture2); + // start multiple guassian blur call, each guassian blur creates two render tasks + DALI_TEST_CHECK(application.GetScene().GetRenderTaskList().GetTaskCount() == 1 + BLUR_LEVELS * 2); + + { + // create renderers for the original image and each blurred image + application.GetScene().Add(blurView); + Wait(application); + DALI_TEST_EQUALS(blurView.GetRendererCount(), BLUR_LEVELS + 1, TEST_LOCATION); + + tet_infoline("Wait for a second to allow blur to finish"); + Wait(application, 1000); + + tet_infoline("Remove from stage"); + application.GetScene().Remove(blurView); + } + + tet_infoline("Test that there are no render tasks remaining"); + DALI_TEST_EQUALS(blurView.GetRendererCount(), 0, TEST_LOCATION); + END_TEST; } -int UtcDaliSuperBlurViewSetImage(void) +int UtcDaliSuperBlurViewSetProperty(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliSuperBlurViewSetImage "); + tet_infoline(" UtcDaliSuperBlurViewSetProperty "); + + SuperBlurView blurView = SuperBlurView::New(BLUR_LEVELS); + // create renderers for the original image and each blurred image + application.GetScene().Add(blurView); + blurView.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f)); - SuperBlurView blurView = SuperBlurView::New( BLUR_LEVELS ); - // create image actors for the original image and each blurred image - DALI_TEST_CHECK( blurView.GetChildCount() == BLUR_LEVELS+1 ); + // Will create ResourceImage + blurView.SetProperty(SuperBlurView::Property::IMAGE_URL, TEST_IMAGE_FILE_NAME); + Wait(application); - Image inputImage = CreateSolidColorImage( application, Color::GREEN, 50, 50 ); - blurView.SetImage( inputImage ); // start multiple guassian blur call, each guassian blur creates two render tasks - DALI_TEST_CHECK( Stage::GetCurrent().GetRenderTaskList().GetTaskCount() == BLUR_LEVELS*2 + 1); + + unsigned int count = application.GetScene().GetRenderTaskList().GetTaskCount(); + DALI_TEST_CHECK(count == 1 + BLUR_LEVELS * 2); + + Wait(application); + + END_TEST; +} + +int UtcDaliSuperBlurViewGetProperty(void) +{ + ToolkitTestApplication application; + + tet_infoline(" UtcDaliSuperBlurViewSetProperty "); + + SuperBlurView blurView = SuperBlurView::New(BLUR_LEVELS); + blurView.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f)); + + blurView.SetProperty(SuperBlurView::Property::IMAGE_URL, TEST_IMAGE_FILE_NAME); + Wait(application); + + // create renderers for the original image and each blurred image + application.GetScene().Add(blurView); + + std::string imageUrl = blurView.GetProperty(SuperBlurView::Property::IMAGE_URL); + DALI_TEST_EQUALS(imageUrl, TEST_IMAGE_FILE_NAME, TEST_LOCATION); + END_TEST; } @@ -162,12 +318,12 @@ int UtcDaliSuperBlurViewSetGetBlurStrength(void) tet_infoline(" UtcDaliSuperBlurViewSetGetBlurStrength "); - SuperBlurView blurView = SuperBlurView::New( BLUR_LEVELS ); - DALI_TEST_EQUALS(blurView.GetCurrentBlurStrength(), 0.f, TEST_LOCATION ); + SuperBlurView blurView = SuperBlurView::New(BLUR_LEVELS); + DALI_TEST_EQUALS(blurView.GetCurrentBlurStrength(), 0.f, TEST_LOCATION); - blurView.SetBlurStrength( 0.65f ); + blurView.SetBlurStrength(0.65f); Wait(application); - DALI_TEST_EQUALS(blurView.GetCurrentBlurStrength(), 0.65f, TEST_LOCATION ); + DALI_TEST_EQUALS(blurView.GetCurrentBlurStrength(), 0.65f, TEST_LOCATION); END_TEST; } @@ -177,42 +333,69 @@ int UtcDaliSuperBlurViewGetBlurStrengthPropertyIndex(void) tet_infoline(" UtcDaliSuperBlurViewGetBlurStrengthPropertyIndex "); - SuperBlurView blurView = SuperBlurView::New( BLUR_LEVELS ); + SuperBlurView blurView = SuperBlurView::New(BLUR_LEVELS); Property::Index blurPropertyIdx = blurView.GetBlurStrengthPropertyIndex(); float blurStrength; - (blurView.GetProperty( blurPropertyIdx )).Get(blurStrength); - DALI_TEST_EQUALS(blurStrength, 0.f, TEST_LOCATION ); + (blurView.GetProperty(blurPropertyIdx)).Get(blurStrength); + DALI_TEST_EQUALS(blurStrength, 0.f, TEST_LOCATION); - blurView.SetBlurStrength( 0.65f ); + blurView.SetBlurStrength(0.65f); Wait(application); - (blurView.GetProperty( blurPropertyIdx )).Get(blurStrength); - DALI_TEST_EQUALS(blurStrength, 0.65f, TEST_LOCATION ); + (blurView.GetProperty(blurPropertyIdx)).Get(blurStrength); + DALI_TEST_EQUALS(blurStrength, 0.65f, TEST_LOCATION); END_TEST; } -int UtcDaliSuperBlurViewGetBlurredImage(void) +int UtcDaliSuperBlurViewGetBlurredTexture(void) { ToolkitTestApplication application; - tet_infoline( "UtcDaliSuperBlurViewGetBlurredImage" ); + tet_infoline("UtcDaliSuperBlurViewGetBlurredTexture"); - SuperBlurView blurView = SuperBlurView::New( BLUR_LEVELS ); - blurView.SetSize( 100.f,100.f ); - Image inputImage = CreateSolidColorImage( application, Color::GREEN, 100, 100 ); - blurView.SetImage( inputImage ); + SuperBlurView blurView = SuperBlurView::New(BLUR_LEVELS); + blurView.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f)); + Texture inputTexture = CreateSolidColorTexture(application, Color::GREEN, 100, 100); + blurView.SetTexture(inputTexture); Wait(application, 200); // Make sure all the gaussian blur finished - Image image1 = blurView.GetBlurredImage( 1 ); - DALI_TEST_CHECK( image1 ); + Texture texture1 = blurView.GetBlurredTexture(1); + DALI_TEST_CHECK(texture1); + + Texture texture2 = blurView.GetBlurredTexture(2); + DALI_TEST_EQUALS(texture2.GetWidth(), 25u, TEST_LOCATION); + DALI_TEST_EQUALS(texture2.GetHeight(), 25u, TEST_LOCATION); + + Texture texture3 = blurView.GetBlurredTexture(3); + DALI_TEST_CHECK(texture3); + + END_TEST; +} + +int UtcDaliSuperBlurViewBlurSignal(void) +{ + ToolkitTestApplication application; + + tet_infoline(" UtcDaliSuperBlurViewSignal "); + + SuperBlurView blurView = SuperBlurView::New(BLUR_LEVELS); + blurView.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f)); + + Texture inputTexture = CreateSolidColorTexture(application, Color::GREEN, 50, 50); + blurView.SetTexture(inputTexture); + // start multiple guassian blur call, each guassian blur creates two render tasks + DALI_TEST_CHECK(application.GetScene().GetRenderTaskList().GetTaskCount() == 1 + BLUR_LEVELS * 2); + + SignalHandler signalHandler; + blurView.BlurFinishedSignal().Connect(&signalHandler, &SignalHandler::Callback); - Image image2 = blurView.GetBlurredImage( 2 ); - DALI_TEST_EQUALS( image2.GetWidth(), 25u, TEST_LOCATION ); - DALI_TEST_EQUALS( image2.GetHeight(), 25u, TEST_LOCATION ); + // create renderers for the original image and each blurred image + application.GetScene().Add(blurView); + Wait(application, 1000); - Image image3 = blurView.GetBlurredImage( 3 ); - DALI_TEST_CHECK( FrameBufferImage::DownCast( image2 ) ); + DALI_TEST_EQUALS(blurView.GetRendererCount(), BLUR_LEVELS + 1, TEST_LOCATION); + //DALI_TEST_EQUALS(signalHandler.GetCalls(), 1, TEST_LOCATION); END_TEST; }