static void setup(ulong32 *dk, ulong32 *k, ulong32 *uk) { int n, t; ulong32 p[2]; p[0] = dk[0]; p[1] = dk[1]; t = 4; n = 0; pi1(p); pi2(p, k); uk[n++] = p[0]; pi3(p, k); uk[n++] = p[1]; pi4(p, k); uk[n++] = p[0]; pi1(p); uk[n++] = p[1]; pi2(p, k+t); uk[n++] = p[0]; pi3(p, k+t); uk[n++] = p[1]; pi4(p, k+t); uk[n++] = p[0]; pi1(p); uk[n++] = p[1]; }
AD<Base> atan2 (const AD<Base> &y, const AD<Base> &x) { AD<Base> alpha; AD<Base> beta; AD<Base> theta; AD<Base> zero(0.); AD<Base> pi2(2. * atan(1.)); AD<Base> pi(2. * pi2); AD<Base> ax = abs(x); AD<Base> ay = abs(y); // if( ax > ay ) // theta = atan(ay / ax); // else theta = pi2 - atan(ax / ay); alpha = atan(ay / ax); beta = pi2 - atan(ax / ay); theta = CondExpGt(ax, ay, alpha, beta); // use of CondExp // if( x <= 0 ) // theta = pi - theta; theta = CondExpLe(x, zero, pi - theta, theta); // use of CondExp // if( y <= 0 ) // theta = - theta; theta = CondExpLe(y, zero, -theta, theta); // use of CondExp return theta; }
void KisStrokeBenchmark::benchmarkRandomLines(QString presetFileName) { KisPaintOpPresetSP preset = new KisPaintOpPreset(m_dataPath + presetFileName); bool loadedOk = preset->load(); if (!loadedOk){ dbgKrita << "The preset was not loaded correctly. Done."; return; }else{ dbgKrita << "preset : " << presetFileName; } m_painter->setPaintOpPreset(preset, m_layer, m_image); QBENCHMARK{ KisDistanceInformation currentDistance; for (int i = 0; i < LINES; i++){ KisPaintInformation pi1(m_startPoints[i], 0.0); KisPaintInformation pi2(m_endPoints[i], 1.0); m_painter->paintLine(pi1, pi2, ¤tDistance); } } #ifdef SAVE_OUTPUT m_layer->paintDevice()->convertToQImage(0).save(m_outputPath + presetFileName + "_randomLines" + OUTPUT_FORMAT); #endif }
static void noekeon_round(uint32_t *key, uint32_t *state, uint8_t const1, uint8_t const2){ ((uint8_t*)state)[RC_POS] ^= const1; theta(key, state); ((uint8_t*)state)[RC_POS] ^= const2; pi1(state); gamma_1(state); pi2(state); }
static void encrypt(ulong32 *p, int N, ulong32 *uk) { int n, t; for (t = n = 0; ; ) { pi1(p); if (++n == N) break; pi2(p, uk+t); if (++n == N) break; pi3(p, uk+t); if (++n == N) break; pi4(p, uk+t); if (++n == N) break; t ^= 4; } }
void tst_pods::testConstructors() { PodI pi1; QCOMPARE(pi1.i(), 0); PodI pi2(1); QCOMPARE(pi2.i(), 1); PodI pi3(pi2); QCOMPARE(pi3.i(), pi2.i()); }
void test_can_get_a_second_future_from_a_moved_void_promise() { boost::promise<void> pi; boost::unique_future<void> fi=pi.get_future(); boost::promise<void> pi2(::cast_to_rval(pi)); boost::unique_future<void> fi2=pi.get_future(); pi2.set_value(); BOOST_CHECK(fi.is_ready()); BOOST_CHECK(!fi2.is_ready()); pi.set_value(); BOOST_CHECK(fi2.is_ready()); }
static void decrypt(ulong32 *p, int N, ulong32 *uk) { int n, t; for (t = 4*((N&1)^1), n = N; ; ) { switch (n >= 4 ? 4 : 0) { case 4: pi4(p, uk+t); --n; case 3: pi3(p, uk+t); --n; case 2: pi2(p, uk+t); --n; case 1: pi1(p); --n; break; case 0: return; } t ^= 4; } }
static bool IsQuadrangle(cv::Point2f p1, cv::Point2f p2, cv::Point2f p3, cv::Point2f p4) { cv::Point2d pi1((int)p1.x, (int)p1.y); cv::Point2d pi2((int)p2.x, (int)p2.y); cv::Point2d pi3((int)p3.x, (int)p3.y); cv::Point2d pi4((int)p4.x, (int)p4.y); return !(IsOverlapped(pi1, pi2) || IsOverlapped(pi1, pi3) || IsOverlapped(pi1, pi4) || IsOverlapped(pi2, pi3) || IsOverlapped(pi2, pi4) || IsOverlapped(pi3, pi4) || IsLine(pi1, pi2, pi3) || IsLine(pi1, pi2, pi4) || IsLine(pi2, pi3, pi4)); }
void ofDrawRectOutline(const ofRectangle & rect, int thickness, ofDrawRectOutlineMode mode) { float b0, b1; if(mode == ofDrawRectOutlineModeOuter) { b0 = thickness; b1 = 0; } else if(mode == ofDrawRectOutlineModeInner) { b0 = 0; b1 = thickness; } else if(mode == ofDrawRectOutlineModeMiddle) { b0 = thickness * 0.5; b1 = thickness * 0.5; } ofVec2f po0(rect.x - b0, rect.y - b0); ofVec2f po1(rect.x + rect.width + b0, rect.y - b0); ofVec2f po2(rect.x + rect.width + b0, rect.y + rect.height + b0); ofVec2f po3(rect.x - b0, rect.y + rect.height + b0); ofVec2f pi0(rect.x + b1, rect.y + b1); ofVec2f pi1(rect.x + rect.width - b1, rect.y + b1); ofVec2f pi2(rect.x + rect.width - b1, rect.y + rect.height - b1); ofVec2f pi3(rect.x + b1, rect.y + rect.height - b1); ofBeginShape(); ofVertex(po0.x, po0.y); ofVertex(po1.x, po1.y); ofVertex(po2.x, po2.y); ofVertex(po3.x, po3.y); ofNextContour(); ofVertex(pi0.x, pi0.y); ofVertex(pi1.x, pi1.y); ofVertex(pi2.x, pi2.y); ofVertex(pi3.x, pi3.y); ofEndShape(true); }
inline void KisStrokeBenchmark::benchmarkLine(QString presetFileName) { KisPaintOpPresetSP preset = new KisPaintOpPreset(m_dataPath + presetFileName); preset->load(); m_painter->setPaintOpPreset(preset, m_layer, m_image); QPointF startPoint(0.10 * TEST_IMAGE_WIDTH, 0.5 * TEST_IMAGE_HEIGHT); QPointF endPoint(0.90 * TEST_IMAGE_WIDTH, 0.5 * TEST_IMAGE_HEIGHT); KisDistanceInformation currentDistance; KisPaintInformation pi1(startPoint, 0.0); KisPaintInformation pi2(endPoint, 1.0); QBENCHMARK{ m_painter->paintLine(pi1, pi2, ¤tDistance); } #ifdef SAVE_OUTPUT m_layer->paintDevice()->convertToQImage(0).save(m_outputPath + presetFileName + "_line" + OUTPUT_FORMAT); #endif }
Type atan3(Type y, Type x){ { Type alpha; Type beta; Type theta; Type zero(0.); Type pi2(2. * atan(1.)); Type pi(2. * pi2); Type ax = fabs(x); Type ay = fabs(y); // if( ax > ay ) // theta = atan(ay / ax); // else theta = pi2 - atan(ax / ay); alpha = atan(ay / (ax + 1e-6)); beta = pi2 - atan(ax / (ay + 1e-6)); theta = CppAD::CondExpGt(ax, ay, alpha, beta); // use of CondExp // if( x <= 0 ) // theta = pi - theta; theta = CppAD::CondExpLe(x, zero, pi - theta, theta); // use of CondExp // if( y <= 0 ) // theta = - theta; theta = CppAD::CondExpLe(y, zero, -theta, theta); // use of CondExp // if( x == y == 0) <=> if( ax+ay == 0) // theta = 0 theta = CppAD::CondExpEq(ax+ay, zero, zero, theta); return theta; } }
/** * This benchmark runs a series of huge strokes on a canvas with a * particular configuration of the swapper/pooler and history * management. After the test is done you can visualize the results * with the GNU Octave. Please use kis_low_memory_show_report.m file * for that. */ void KisLowMemoryBenchmark::benchmarkWideArea(const QString presetFileName, const QRectF &rect, qreal vstep, int numCycles, bool createTransaction, int hardLimitMiB, int softLimitMiB, int poolLimitMiB, int index) { KisPaintOpPresetSP preset = new KisPaintOpPreset(QString(FILES_DATA_DIR) + QDir::separator() + presetFileName); LOAD_PRESET_OR_RETURN(preset, presetFileName); /** * Initialize image and painter */ const KoColorSpace *colorSpace = KoColorSpaceRegistry::instance()->rgb8(); KisImageSP image = new KisImage(0, HUGE_IMAGE_SIZE, HUGE_IMAGE_SIZE, colorSpace, "stroke sample image", true); KisLayerSP layer = new KisPaintLayer(image, "temporary for stroke sample", OPACITY_OPAQUE_U8, colorSpace); KisLayerSP layerExtra = new KisPaintLayer(image, "temporary for threading", OPACITY_OPAQUE_U8, colorSpace); image->addNode(layer, image->root()); image->addNode(layerExtra, image->root()); KisPainter *painter = new KisPainter(layer->paintDevice()); painter->setPaintColor(KoColor(Qt::black, colorSpace)); painter->setPaintOpPreset(preset, layer, image); /** * A simple adapter that will store all the transactions for us */ KisSurrogateUndoAdapter undoAdapter; /** * Reset configuration to the desired settings */ KisImageConfig config; qreal oldHardLimit = config.memoryHardLimitPercent(); qreal oldSoftLimit = config.memorySoftLimitPercent(); qreal oldPoolLimit = config.memoryPoolLimitPercent(); const qreal _MiB = 100.0 / KisImageConfig::totalRAM(); config.setMemoryHardLimitPercent(hardLimitMiB * _MiB); config.setMemorySoftLimitPercent(softLimitMiB * _MiB); config.setMemoryPoolLimitPercent(poolLimitMiB * _MiB); KisTileDataStore::instance()->testingRereadConfig(); /** * Create an empty the log file */ QString fileName; fileName = QString("log_%1_%2_%3_%4_%5.txt") .arg(createTransaction) .arg(hardLimitMiB) .arg(softLimitMiB) .arg(poolLimitMiB) .arg(index); QFile logFile(fileName); logFile.open(QFile::WriteOnly | QFile::Truncate); QTextStream logStream(&logFile); logStream.setFieldWidth(10); logStream.setFieldAlignment(QTextStream::AlignRight); /** * Start painting on the image */ QTime cycleTime; QTime lineTime; cycleTime.start(); lineTime.start(); qreal rectBottom = rect.y() + rect.height(); for (int i = 0; i < numCycles; i++) { cycleTime.restart(); QLineF line(rect.topLeft(), rect.topLeft() + QPointF(rect.width(), 0)); if (createTransaction) { painter->beginTransaction(); } KisDistanceInformation currentDistance; while(line.y1() < rectBottom) { lineTime.restart(); KisPaintInformation pi1(line.p1(), 0.0); KisPaintInformation pi2(line.p2(), 1.0); painter->paintLine(pi1, pi2, ¤tDistance); painter->device()->setDirty(painter->takeDirtyRegion()); logStream << "L 1" << i << lineTime.elapsed() << KisTileDataStore::instance()->numTilesInMemory() * 16 << KisTileDataStore::instance()->numTiles() * 16 << createTransaction << endl; line.translate(0, vstep); } painter->device()->setDirty(painter->takeDirtyRegion()); if (createTransaction) { painter->endTransaction(&undoAdapter); } // comment/uncomment to emulate user waiting after the stroke QTest::qSleep(1000); logStream << "C 2" << i << cycleTime.elapsed() << KisTileDataStore::instance()->numTilesInMemory() * 16 << KisTileDataStore::instance()->numTiles() * 16 << createTransaction << config.memoryHardLimitPercent() / _MiB << config.memorySoftLimitPercent() / _MiB << config.memoryPoolLimitPercent() / _MiB << endl; } config.setMemoryHardLimitPercent(oldHardLimit * _MiB); config.setMemorySoftLimitPercent(oldSoftLimit * _MiB); config.setMemoryPoolLimitPercent(oldPoolLimit * _MiB); delete painter; }