summaryrefslogtreecommitdiff
path: root/src/qcam/assets/feathericons/mouse-pointer.svg
AgeCommit message (Collapse)Author
2020-02-14qcam: assets: Provide initial icon setKieran Bingham
Provide simple clean icons from https://feathericons.com/ (https://github.com/feathericons/feather) These are provided under the MIT license. Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
f='#n43'>43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
 * Copyright (C) 2020, Google Inc.
 *
 * object.cpp - Object deletion tests
 */

#include <iostream>

#include <libcamera/object.h>

#include "libcamera/internal/thread.h"

#include "test.h"

using namespace std;
using namespace libcamera;

class TestObject : public Object
{
public:
	TestObject(unsigned int *count)
		: deleteCount_(count)
	{
	}

	~TestObject()
	{
		/* Count the deletions from the correct thread. */
		if (thread() == Thread::current())
			(*deleteCount_)++;
	}

	unsigned int *deleteCount_;
};

class NewThread : public Thread
{
public:
	NewThread(Object *obj)
		: object_(obj)
	{
	}

protected:
	void run()
	{
		object_->deleteLater();
	}

private:
	Object *object_;
};

class ObjectDeleteTest : public Test
{
protected:
	int run()
	{
		/*
		 * Test that deferred deletion is executed from the object's
		 * thread, not the caller's thread.
		 */
		unsigned int count = 0;
		TestObject *obj = new TestObject(&count);

		NewThread thread(obj);
		thread.start();
		thread.wait();

		Thread::current()->dispatchMessages(Message::Type::DeferredDelete);

		if (count != 1) {
			cout << "Failed to dispatch DeferredDelete (" << count << ")" << endl;
			return TestFail;
		}

		/*
		 * Test that multiple calls to deleteLater() delete the object
		 * once only.
		 */
		count = 0;
		obj = new TestObject(&count);
		obj->deleteLater();
		obj->deleteLater();

		Thread::current()->dispatchMessages(Message::Type::DeferredDelete);
		if (count != 1) {
			cout << "Multiple deleteLater() failed (" << count << ")" << endl;
			return TestFail;
		}

		return TestPass;
	}
};

TEST_REGISTER(ObjectDeleteTest)